栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python中的scrapy爬虫框架入门使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中的scrapy爬虫框架入门使用

项目开发流程

创建项目
创建爬虫
提取数据
保存数据

创建scrapy框架项目

scrapy startproject <项目名称>

创建爬虫

通过命令创建出爬虫文件,爬虫文件为主要的代码作业文件,通常一个网站的爬取动作都会在爬虫文件中进行编写。

命令:
项目路径下执行
scrapy genspider <爬虫名字> <允许爬取的域名>

爬虫名字: 作为爬虫运行时的参数
允许爬取的域名:为对于爬虫设置的爬取范围,设置之后用于过滤要爬取的url,如果爬取的url与允许的域不通则被过滤掉。
cd myspider
scrapy genspider itcast itcast.cn

prase函数作用为对url访问后返回的对象进行的操作

运行scrapy

scrapy crawl <爬虫名称>
在项目目录下执行scrapy crawl itcast运行爬虫文件

运行结果:
在项目目录下生成了itcast.html文件

定位元素以及提取数据、属性值的方法

解析并获取scrapy爬虫中的数据: 利用xpath规则字符串进行定位和提取

  1. response.xpath方法的返回结果是一个类似list的类型,其中包含的是selector对象,操作和列表一样,但是有一些额外的方法
  2. 额外方法extract():返回一个包含有字符串的列表
  3. 额外方法extract_first():返回列表中的第一个字符串,列表为空没有返回None
response响应对象的常用属性
  • response.url:当前响应的url地址
  • response.request.url:当前响应对应的请求的url地址
  • response.headers:响应头
  • response.requests.headers:当前响应的请求头
  • response.body:响应体,也就是html代码,byte类型
  • response.status:响应状态码
例子
import scrapy
class ItcastSpider(scrapy.Spider):
    name = 'itcast'
    allowed_domains = ['itcast.cn']
    start_urls = ['https://www.xxxx.cn/channel/teacher.shtml#ajavaee']

    def parse(self, response):
        #获取所有教师节点
        node_list=response.xpath('//div[@]')
        print(len(node_list))

        #遍历教师节点列表,在每个教师节点中提取数据
        for node in node_list:
            temp={}
            #xpath方法返回的是选择器对象列表
            #scrapy框架中xpath返回的与平常的xpath不一样
            #平时这个xpath语句会直接返回字符串列表,但是在scrapy框架中会返回一个selector对象列表,需通过索引取出selector对象,
            #在通过特有的方法取selector对象的值
            temp['name']=node.xpath('./h3/text()').extract_first()
            temp['title'] = node.xpath('./h4/text()').extract_first()
            temp['desc'] = node.xpath('./p/text()')[0].extract()
            #extract:提取selector对象中的值,extract_first():提取第一个selector对象中的值
            #xpath结果为只有一个值的列表,可以使用extract_first(),如果为多个值则使用extract
            yield temp

分析:
1.设置start_urls访问的url,进行访问并返回
2.在响应返回的数据中通过xpath筛选出需要的节点返回一个selector对象列表
3.通过循环遍历列表中的每个selector对象,用xpath对每个selector对象进行筛选并返回一个新的selector对象列表
4.用extract或者extract_first()对每个新的selector对象进行数据提取

保存数据

利用管道pipeline来处理(保存)数据

在pipelines.py文件中定义对数据的操作
  1. 定义一个管道类
  2. 重写管道类的process_item方法
  3. process_item方法处理完item之后必须返回给引擎

步骤:

爬虫文件中parse函数返回的数据将传送到项目目录下pipelines.py文件的管道类中

在settings.py中删除注释,启用管道类
名字含义依次是:项目名称,pipelines.py文件,TestSpiderPipeline管道类名
300为管道执行的顺序

执行后查看是否启用管道类

在管道类TestSpiderPipeline中对爬虫文件返回的数据进行保存操作

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

# useful for handling different item types with a single interface
import json

from itemadapter import ItemAdapter
class TestSpiderPipeline:

    def __init__(self):
        self.file=open('itcast.json','w')

    def process_item(self, item, spider):

        #将字典数据序列号
        json_data=json.dumps(item) +',n'
        #将数据写入文件
        self.file.write(json_data)

        return item

    def __del__(self):
        self.file.close()

保存的数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/950227.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号