您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页【爬虫】-013-Scrapy-CrawlSpider实例

【爬虫】-013-Scrapy-CrawlSpider实例

来源:二三娱乐

LinkExtractor类

  • 基本概念

LinkExtractor类的对象作用是从网页(即Response对象)中抽取最终将会被follow链接。LinkExtractor有唯一的公共方法是 extract_links ,它接收一个Response对象,并返回一个 scrapy.link.Link 对象。Link Extractor要实例化一次并且 extract_links 方法会根据不同的response调用多次提取链接。

  • 例子

进入实验环境:

scrapy shell 

导入 LinkExtractor库:

from scrapy.linkextractors import LinkExtractor

创建 LinkExtractor对象,设置正则规则,从当前页面中寻找目标链接:

le = 
le.extract_links(response)

查看获取的Link对象:

print([link for link in le.extract_links(response)])

CrawlSpider实例

根据CrawlSpider运行机制,在理解类LinkExtractor类的使用方法后,接下来实操一下如何用CrawlSpider爬虫获取数据。
接着上面的例子,我们获取详情页的标题和价格信息,代码如下:

class Ganji2Spider(CrawlSpider):
    name = 'ganji2'
    allowed_domains = 
    start_urls = 

    get_links = []

    # 匹配规则,匹配正则然后给回调函数
    rules = (
         callback='parse_item', follow=False),
    )

    def parse_item(self, response):
        item = {}
        item['title'] = response.xpath('//p[@class="card-title"]/i/text()').get()
        item['price'] = response.xpath('//span[@class="price"]/text()').get()
        print(item)

follow机制

现在已经可以从start_urls开始获取页面中包含的详情页链接,并获取其中的标题和价格信息。那么,如何不断的获取新的页面,再爬起详情页中的数据呢?

CrawlSpider中,对链接对提取使用LinkExtractor类,所以从start_urls请求后得到的response中分析下一页链接的特点,用正则表达式匹配出来。

好了,如此可以更新我们的CrawlSpider爬虫。

class Ganji2Spider(CrawlSpider):
    name = 'ganji2'
    allowed_domains = 
    start_urls = 

    # 获取的链接列表
    get_links = []

    # 匹配规则,匹配正则然后给回调函数
    rules = (
         callback='parse_item', follow=False),
        # 下一页链接的正则规则,持续跟进,不断发起请求
        
    )

    def parse_item(self, response):
        item = {}
        # 请求下一页得到的响应中的详情页链接,将返回的响应装入列表
        self.get_links.append(response)
        # 查看响应的链接地址,通过计算列表长度来计数
        print(response.url, len(self.get_links))

        print('*' * 10)
        item['title'] = response.xpath('//p[@class="card-title"]/i/text()').get()
        item['price'] = response.xpath('//span[@class="price"]/text()').get()
        print(item)

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务