【问题标题】:Scrapy recursive scraping fails to crawl all pagesScrapy递归抓取无法爬取所有页面
【发布时间】:2015-10-19 05:13:09
【问题描述】:

我正在尝试从中国网站递归抓取数据。我让我的蜘蛛跟随“下一页”网址,直到没有“下一页”可用。下面是我的蜘蛛:

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from hrb.items_hrb import HrbItem


class HrbSpider(CrawlSpider):
    name = "hrb"
    allowed_domains = ["www.harbin.gov.cn"]
    start_urls = ["http://bxt.harbin.gov.cn/hrb_bzbxt/list_hf.php"]

    rules = (
        Rule(SgmlLinkExtractor(allow=(), restrict_xpaths=(u'//a[@title="\u4e0b\u4e00\u9875"]',)), callback="parse_items", follow= True),
    )

    def parse_items(self, response):
        items = []
        for sel in response.xpath("//table[3]//tr[position() > 1]"):
            item = HrbItem()
            item['id'] = sel.xpath("td[1]/text()").extract()[0]

            title = sel.xpath("td[3]/a/text()").extract()[0]
            item['title'] = title.encode('gbk') 

            item['time1'] = sel.xpath("td[3]/text()").extract()[0][2:12]
            item['time2'] = sel.xpath("td[5]/text()").extract()[1]

            items.append(item)
        return(items)        

问题在于它只抓取了前 15 页。我浏览了第 15 页,仍然有一个“下一页”按钮。那么它为什么停止了呢?网站是否打算防止抓取?还是我的代码有问题?如果我们一次只能抓取 15 页,有没有办法从某个页面开始抓取,比如第 16 页?非常感谢!

【问题讨论】:

    标签: python scrapy


    【解决方案1】:

    约瑟夫,

    尝试分析您的蜘蛛正在抓取的网页的网址,并将它们与您的蜘蛛停止抓取的网址进行比较。 还可以尝试从您允许的域中的 url 中删除 www.。 您可以允许尝试在允许的 SgmlLinkExtractor 集中包含 harbin.gov.cn/hrb_bzbxt/list_hf.php.* 之类的内容。

    希望这可能会有所帮助。

    干杯!!

    【讨论】:

      猜你喜欢
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-12
      • 1970-01-01
      • 2015-10-09
      • 2014-08-12
      相关资源
      最近更新 更多