scrapy框架之crawlspider(代码片段)

zzbj zzbj     2023-03-09     747

关键词:

一、介绍

CrawlSpider是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。
其中最显著的功能就是"LinkExtractors"链接提取器。Spider是所有爬虫的基类,其设计原则只是为了爬取start_url列表中网页,而从爬取到的网页中提取出的url进行继续的爬取工作使用CrawlSpider更合适。
CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取。

 

二、创建步骤

1.创建scrapy工程:scrapy startproject projectName

2.创建爬虫文件:scrapy genspider -t crawl spiderName www.xxx.com
    --此指令对比之前的指令多了 "-t crawl",表示创建的爬虫文件是基于CrawlSpider这个类的,而不再是Spider这个基类。

3.启动项目:scrapy crawl spiderName

 

三、分析基于CrawlSpider生成的爬虫文件

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor  # 导入CrawlSpider相关模块
from scrapy.spiders import CrawlSpider, Rule


class QiubaiSpider(CrawlSpider):  # 表示该爬虫程序是基于CrawlSpider类的
    name = qiubai
    # allowed_domains = [‘https://www.qiushibaike.com/text/‘]
    start_urls = [https://www.qiushibaike.com/text/]

    # LinkExtractor:链接提取器,用正则(xpath)定义需要爬取的url,从起始url对应的页面中提取符合要求的链接
    # rules:定义"提取动作",rules中可以包含一个或多个Rule对象,在Rule对象中包含了LinkExtractor对象。
    # callback:定义解析方法
    # follow=True:将链接提取器继续作用到链接提取器提取出的链接所对应的页面中
    rules = (
        Rule(LinkExtractor(allow=r/text/page/d+/), callback=parse_item, follow=True),
    )

    def parse_item(self, response):
        i = 
        #i[‘domain_id‘] = response.xpath(‘//input[@id="sid"]/@value‘).extract()
        #i[‘name‘] = response.xpath(‘//div[@id="name"]‘).extract()
        #i[‘description‘] = response.xpath(‘//div[@id="description"]‘).extract()
        return i

分析:

3.1 定义LinkExtractor的几种方法
LinkExtractor(
    allow=rItems/# 满足括号中“正则表达式”的值会被提取,如果为空,则全部匹配。

    deny=xxx,  # 满足正则表达式的则不会被提取。

    restrict_xpaths=xxx, # 满足xpath表达式的值会被提取

    restrict_css=xxx, # 满足css表达式的值会被提取

    deny_domains=xxx, # 不会被提取的链接的domains。 
)


3.2 Rule:规则解析器。根据链接提取器中提取到的链接,根据指定规则提取解析器链接网页中的内容。
Rule(LinkExtractor(allow=rItems/), callback=parse_item, follow=True)
    - 参数介绍:
        参数1:指定链接提取器
        参数2:指定规则解析器解析数据的规则(回调函数)
        参数3:是否将链接提取器继续作用到链接提取器提取出的链接网页中。当callback为None,参数3的默认值为true。


3.3 rules=( ):指定不同规则解析器。rules中可以包含一个或多个Rule对象,一个Rule对象表示一种提取规则。


3.4 CrawlSpider整体爬取流程:
    a)爬虫文件首先根据起始url,获取该url的网页内容
    b)链接提取器会根据指定提取规则将步骤a中网页内容中的链接进行提取
    c)规则解析器会根据指定解析规则将链接提取器中提取到的链接中的网页内容根据指定的规则进行解析
    d)将解析数据封装到item中,然后提交给管道进行持久化存储

 

四、爬取糗事百科文字板块的所有页码数据

1、settings.py
USER_AGENT = Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36
ROBOTSTXT_OBEY = False

ITEM_PIPELINES = 
   qiubaiPro.pipelines.QiubaiproPipeline: 300,



2、爬虫文件
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from qiubaiPro.items import QiubaiproItem


class QiubaiSpider(CrawlSpider):
    name = qiubai
    # allowed_domains = [‘https://www.qiushibaike.com/text/‘]
    start_urls = [https://www.qiushibaike.com/text/]

    rules = (
        # 爬取所有页码数
        Rule(LinkExtractor(allow=r/text/page/d+/), callback=parse_item, follow=True),
        # 这个是首页,首页与其他页码数不同,因此定义另一个正则去匹配
        Rule(LinkExtractor(allow=r/text/$), callback=parse_item, follow=True),
    )

    def parse_item(self, response):
        div_list = response.xpath(//div[@id="content-left"]/div)
        for div in div_list:
            # 定义item
            item = QiubaiproItem()
            # 爬取作者
            author = div.xpath(.//div[@class="author clearfix"]/a/h2/text())
            if author:
                author = author[0].extract()
            else:
                author = "匿名用户"
            # 爬取这个用户的段子的内容contents
            contents = div.xpath(.//div[@class="content"]/span/text())  # 遇到换行br就会生成一个Selector对象
            content = ‘‘.join([selector.extract().strip() for selector in contents])
            # 将item提交至管道
            item[author] = author
            item[content] = content
            yield item


3、items.py
import scrapy


class QiubaiproItem(scrapy.Item):
    # define the fields for your item here like:
    author = scrapy.Field()  # 作者
    content = scrapy.Field()  # 内容


4、pipelines.py
class QiubaiproPipeline(object):
    def __init__(self):
        self.fp = None

    def open_spider(self, spider):
        print(开始爬虫)
        self.fp = open(./data.txt, w, encoding=utf8)

    def process_item(self, item, spider):
        # 将爬虫文件提交的item写入文件进行持久化存储
        self.fp.write(item[author] + : + item[content] + 
)
        return item

    def close_spider(self, spider):
        print(结束爬虫)
        self.fp.close()

 

scrapy框架之crawlspider(代码片段)

一、介绍CrawlSpider是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是"LinkExtractors"链接提取器。Spider是所有爬虫的基类,其设计原则只是为了爬取start_url... 查看详情

scrapy框架之(crawlspider)(代码片段)

一.CrawlSpider简介如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法?方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法)。方法二:基于CrawlSpider的自动爬取进... 查看详情

18python网路爬虫之scrapy框架中的crawlspider详解(代码片段)

CrawlSpider的引入:    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法?  方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法)。  方法二:基于Craw... 查看详情

scrapy框架--crawlspider(代码片段)

CrawlSpider类,Spider的一个子类  -全站数据爬取的方式    -基于Spider:手动请求    -基于CrawlSpider  -CrawlSpider的使用:    -创建一个工程    -cdXXX  -创建爬虫文件(CrawlSpider):    -scrapygenspider-tcraw... 查看详情

爬虫scrapy框架-crawlspider链接提取器与规则解析器(代码片段)

一:Crawlspider简介    CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大的特性和功能。其中最显著的功能就是”LinkExtractors链接提取器“。Spider是所有爬虫的基类,其设计... 查看详情

scrapy框架中的crawlspider(代码片段)

...进行实现(Request模块递归回调parse方法)。方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效)。 一.简介  CrawlSpider其实是Spider的一个子类,除了继承到Spider的特性和功能外,还派生除了其自己独有的更加强大... 查看详情

scrapy框架crawlspider类爬虫实例(代码片段)

CrawlSpider类爬虫中:rules用于定义提取URl地址规则,元祖数据有顺序  #LinkExtractor连接提取器,提取url地址  #callback提取出来的url地址的response会交给callback处理 #follow当前url地址的响应是否重新经过rules进行提取url地... 查看详情

小爬虫学习——scrapy框架(代码片段)

CrawlSpider创建CrawlSpider的爬虫文件命令:scrapygenspider-tcrawl爬虫文件名域名Rule功能:Rule用来定义CrawlSpider的爬取规则参数:link_extractor:LinkExtractor对象,它定义如何从每个已爬网页面中提取链接。callback:回... 查看详情

scrapy框架-----crawlspiders(代码片段)

CrawlSpiders通过下面的命令可以快速创建CrawlSpider模板的代码:scrapygenspider-tcrawltencenttencent.com上一个案例中,我们通过正则表达式,制作了新的url作为Request请求参数,现在我们可以换个花样...classscrapy.spiders.CrawlSpider它是Spider的派... 查看详情

scrapy框架-spider和crawlspider的区别(代码片段)

目录1.目标2.方法1:通过Spider爬取3.通过CrawlSpider爬取1.目标http://wz.sun0769.com/index.php/question/questionType?type=4&page=爬取每个页面链接的内部内容和投诉信息2.方法1:通过Spider爬取#-*-coding:utf-8-*-importscrapyfromdongguanSpider.itemsimportDongguan... 查看详情

scrapy爬虫进阶crawlspider类的使用(代码片段)

Scrapy的crawlspider爬虫1.crawlspider是什么2.创建crawlspider爬虫并观察爬虫内的默认内容2.1创建crawlspider爬虫:2.2spider中默认生成的内容如下:2.3观察跟普通的scrapy.spider的区别3.crawlspider网易招聘爬虫4.crawlspider使用的注意点5.了解... 查看详情

scrapy学习第三课(代码片段)

python爬虫框架scrapy学习第三课利用CrawlSpider类改写成套招标数据爬取利用CrawlSpider类改写成套招标数据爬取创建一个新的项目scrapystartprojectBidsSpider新建一个利用crawlSpider的爬虫基类scrapygenspider-tcrawlpublicBidshubeibidding.com重点:scr... 查看详情

scrapy框架——crawlspider爬取某热线网站(代码片段)

CrawlSpiderScrapy框架中分两类爬虫,Spider类和CrawlSpider类。它是Spider的派生类,Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的... 查看详情

scrapy——3crawlspider(代码片段)

scrapy——3 crawlSpider crawlSpider爬取一般网站常用的爬虫类。其定义了一些规则(rule)来提供跟进link的方便的机制。也许该spider并不是完全适合您的特定网站或项目,但其对很多情况都使用。因此您可以以其为起点,根据需求... 查看详情

scrapy:crawlspider的使用(代码片段)

Scrapy(五):CrawlSpider的使用说明:CrawlSpider,就是一个类,是Spider的一个子类,也是一个官方类,因为是子类,所以功能更加的强大,多了一项功能:去指定的页面中来抓取指定的url的功能比如:很多页码,都需要自己去查找... 查看详情

python爬虫之scrapy框架系列(12)——实战zh小说的爬取来深入学习crawlspider

目录:1.CrawlSpider的引入:(1)首先:观察之前创建spider爬虫文件时(2)然后:通过命令scrapygenspider获取帮助:(3)最后:使用模板crawl创建一个爬虫文件:2.CrawlSpider的正式讲解2.1我们通过爬取ZH小说来深入了解它!规划我们的... 查看详情

python爬虫之scrapy框架系列(12)——实战zh小说的爬取来深入学习crawlspider

目录:1.CrawlSpider的引入:(1)首先:观察之前创建spider爬虫文件时(2)然后:通过命令scrapygenspider获取帮助:(3)最后:使用模板crawl创建一个爬虫文件:2.CrawlSpider的正式讲解2.1我们通过爬取ZH小说来深入了解它!规划我们的... 查看详情

python爬虫--scrapy框架的学习和使用⭐---第二部分(代码片段)

文章目录九、CrawlSpider⭐⭐⭐实战项目问题总结十、分布式爬虫十一、增量式爬虫总结九、CrawlSpider⭐⭐⭐是一个类,基于Spider的子类。子类继承父类所有的功能,并能派生出自己的功能!用于全栈数据的爬取基于Spide... 查看详情