我正试图以递归方式从中文网站抓取数据。我让我的蜘蛛跟着“下一页”网址,直到没有“下一页”可用。下面是我的蜘蛛:
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页,有没有办法从某个页面开始刮,比如说,?非常感谢!
答案 0 :(得分:1)
约瑟夫,
尝试分析蜘蛛抓取的网页的网址,并将其与蜘蛛停止抓取的网址进行比较。
同时尝试从您允许的域中的网址中删除www.
。
您可以尝试在允许的SgmlLinkExtractor集中包含harbin.gov.cn/hrb_bzbxt/list_hf.php.*
之类的内容。
希望这可能有所帮助。
干杯!!