19-1,scrapy解析详情页数据之CrawlSpider类可实现自动分页

代码简单

前言

使用方式:
CrawlSpider类:定义了一些规则来做跟进爬取,从爬取的页面中获取链接并且进行爬虫
scrapy genspider -t crawl 爬虫名 爬虫域名

一、解析目标页数据,一般很少用

如果要获取start_url的数据,需要重写parse_start_url方法

    # 如果使用crawlspider想要解析列表页的数据
    def parse_start_url(self, response, **kwargs):
        # lis = response.xpath('//ul/li')
        # for li in lis:
        #     print(li.xpath('./span/text()').get())
        pass
    # 解析方法 请求的是详情页的url,所以解析方法解析的是详情页的数据

二、解析详情页数据

rules

规则属性=元组
元组中包含的是多个Rule对象 ,代表规则,规则是根据链接提取器定义的正则来匹配对应的url
匹配成功之后自动发起请求,请求成功进入callback指定的回调方法中
follow参数代表是否继续跟踪
比如:当匹配到详情页url请求之后,如果为True代表从详情页中继续根据规则进行提取
如果为False代表不继续了,进入详情页请求完毕之后就结束了

代码如下(示例):

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

# 属于Spider类的孙子类,属于CrawlSpider的子类
class XjSpider(CrawlSpider):
    name = "xj"
    # allowed_domains = ["xj.com"]
    start_urls = ["https://www.xjie.edu.cn/tzgg1.htm"]
    # LinkExtractor:链接提取器、
    # 提取列表页对应的所有详情页url
    #info/1061/\d+.htm
    # 规则属性=元组
    # 元组中包含的是多个Rule对象 ,代表规则,规则是根据链接提取器定义的正则来匹配对应的url
    # 匹配成功之后自动发起请求,请求成功进入callback指定的回调方法中
    # follow参数代表是否继续跟踪
    # 比如:当匹配到详情页url请求之后,如果为True代表从详情页中继续根据规则进行提取
    # 如果为False代表不继续了,进入详情页请求完毕之后就结束了
    rules = (
        # 详情页
        Rule(LinkExtractor(allow=r"info/1061/\d+.htm"), callback="parse_item", follow=False),
             # 做分页
        Rule(LinkExtractor(allow=r"tzgg1/\d+.htm"), follow=True),)

    # 如果使用crawlspider想要解析列表页的数据
    def parse_start_url(self, response, **kwargs):
        # lis = response.xpath('//ul/li')
        # for li in lis:
        #     print(li.xpath('./span/text()').get())
        pass
    # 解析方法 请求的是详情页的url,所以解析方法解析的是详情页的数据
    num = 1

    def parse_item(self, response):
        # print(response.text)
        print(self.num,response.xpath('//h3/text()').get(),response.url)
        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()
        self.num+=1
        return item


总结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

william_liu1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值