Scrapy的CrawlSpider使用

本文介绍了如何在命令行中使用scrapygenspider生成一个基于crawlspider模板的爬虫,针对Che168网站,包括规则定义和XPath表达式的应用。
摘要由CSDN通过智能技术生成

在命令窗口执行下面命令快速生成满足特定模板的爬虫

scrapy genspider -t crawl ershou che168.com
  • -t crawl:指定了要使用的模板类型为 "crawl"。Scrapy默认提供了几种常见的模板类型,如 "basic","crawl" 和 "csvfeed" 等,其中 "crawl" 是一种适用于需跟踪链接的网页爬虫的模板。

  • ershou:这是你为爬虫选择的名字。在这个例子中,生成的爬虫名字会是 "ershou"。

  • che168.com:这是你为爬虫设定的网站域名。在你生成的爬虫代码中,这个域名会被自动用作限定爬虫活动的范围。

执行这条命令后,将在你当前的目录下生成一个名为 ershou.py 的Python文件,其中包含了基于 "crawl" 模板的预设爬虫代码。

执行之后生成的代码为:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule


class ErshouSpider(CrawlSpider):
    name = "ershou"
    allowed_domains = ["che168.com"]
    start_urls = ["https://www.che168.com/shangqiu/list/#pvareaid=100945"]

    rules = (Rule(LinkExtractor(allow=r"Items/"), callback="parse_item", follow=True),)

    def parse_item(self, response):
        item = {}
        #item["domain_id"] = response.xpath('//input[@id="sid"]/@value').get()
        #item["name"] = response.xpath('//div[@id="name"]').get()
        #item["description"] = response.xpath('//div[@id="description"]').get()
        return item

这里的代码继承为CrawlSpider而不是scrapy.Spider

  1. 接下来是定义规则(rules)。这里定义的规则是一个Rule对象,这个对象有两个参数:LinkExtractor和回调函数callbackLinkExtractor负责提取满足特定条件(即在特定XPath路径下的链接)的URL,然后callback 函数会对这些链接发起请求,并对返回的响应进行处理。follow=True表示对这些提取出来的链接继续执行rules

    rules = (
        Rule(LinkExtractor(restrict_xpaths='//div[@class="tp-cards-tofu fn-clear"]/ul/li/a'), callback="parse_item", follow=False),
        Rule(LinkExtractor(restrict_xpaths='//div[@class="page fn-clear"]/a/'), follow=True)
    )
  1. 第一条规则是:提取匹配XPath表达式'//div[@class="tp-cards-tofu fn-clear"]/ul/li/a'的所有链接,并以parse_item为回调函数进行处理。这个规则不会去跟踪这个链接的下级链接,因为follow=False

  2. 第二条规则是:提取匹配XPath表达式'//div[@class="page fn-clear"]/a/'的所有链接,然后自动跟踪这些链接并进行爬取。Scrapy在爬取过程中会自动进行深度优先搜索,即会优先爬取最深层次的链接。这个规则不执行任何回调函数处理提取的数据,因为没有指定callback参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值