Scrapy:不清楚crawlspider是否正确地跟踪分页

时间:2017-04-19 13:36:50

标签: python pagination scrapy

设置向上

按照提交的示例here,我正在用scrapy抓住住房广告。

在我的情况下,我会关注住房广告页面的链接而不是作者页面,然后抓住住房广告页面以获取信息。

我的蜘蛛正确地从页面上的广告中抓取信息,并按照下一页的分页链接进行操作。

<小时/> 的问题

示例中只使用了一个启动网址,但我希望从大量网址“启动”,这些网址都位于一个页面上。为了获得这些网址,我改用了爬虫。

爬虫玩家获得网址,但是(看似)在跟随分页链接和抓取住房广告之间随机混合。

<小时/> 到目前为止的代码

class RoomsSpider(CrawlSpider):
    name = 'rooms'
    allowed_domains = ['spareroom.co.uk']
    start_urls = ['https://www.spareroom.co.uk/flatshare/london']

    # rules obtains the 'starting' urls
    rules = [Rule(LinkExtractor(restrict_xpaths=(
        '//*[@id="spareroom"]/div[2]/aside[2]/ul/li/a',
        ),),callback='parse_page')]

    def parse_page(self, response):
        # follow links to ad pages
        for href in response.xpath(
               '//*[@id="maincontent"]/ul/li/article/header[1]',
               ).css('a::attr(href)').extract():
            yield scrapy.Request(response.urljoin(href),
                             callback=self.parse_ad)

        # follow pagination links
        next_page = response.xpath(
               '//*[@id="maincontent"]/div[2]/ul[2]/li/strong/a/@href',
               ).extract_first()   
        if next_page is not None:
             next_page = response.urljoin(next_page)
             yield scrapy.Request(next_page, callback=self.parse_page)      

     def parse_ad(self, response):
     # code extracting ad information follows here, 
     # finalising the code with a yield function.  

理想情况下,根据起始网址,蜘蛛会跟随其广告链接,抓取其广告并跟随其分页链接,直到不再有分页链接。

也许我应该添加Rule来获取分页链接,并删除# follow pagination links部分?我不知道该怎么做。

0 个答案:

没有答案