我正在用刮刀创建一个爬虫。
我的蜘蛛必须转到开始页面,其中包含链接列表和下一页的链接。
然后,它必须遵循每个链接,转到此链接,获取信息并返回主页。
最后,当蜘蛛跟随页面的每个链接时,它会转到下一页并重新开始。
class jiwire(CrawlSpider):
name = "example"
allowed_domains = ["example.ndd"]
start_urls = ["page.example.ndd"]
rules = (Rule (SgmlLinkExtractor(allow=("next-page\.htm", ),restrict_xpaths=('//div[@class="paging"]',)), callback="parse_items", follow= True),)
def parse_items(self, response):
hxs = HtmlXPathSelector(response)
links = hxs.select('//td[@class="desc"]')
for link in links :
link = title.select("h3/a/@href").extract()
request = Request("http://v4.jiwire.com/" + str(name), callback=self.parse_sub)
return(request)
def parse_sub(self, response):
hxs = HtmlXPathSelector(response)
name = hxs.select('//div[@id="content"]/div[@class="header"]/h2/text()').extract()
print name
我解开了我的代码:我定义了一个遵循下一页的规则。
为了跟踪当前页面的每个链接,我创建了一个带有链接getted的请求对象,并返回此对象。
通常,对于每个请求返回,我必须在parse_sub函数中看到“print name”。
但是只有一个链接被跟随(并且没有全部),我不明白为什么。
它抓取链接很好,请求对象创建正常,但它每页只输入一次parse_sub。
你能帮帮我吗?
非常感谢
答案 0 :(得分:1)
我回来了!我的问题来自我的回复陈述。
解决方案:
for link in links :
link = title.select("h3/a/@href").extract()
request = Request(link, callback=self.parse_hotspot)
yield request