我在爬viagogo.com网站 我想从页面抓取每个节目: http://www.viagogo.com/Concert-Tickets/Rock-and-Pop 我可以得到显示在第一页,但当我试图移动下一页,它只是不爬行! 这是我的代码:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors import LinkExtractor
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from viagogo.items import ViagogoItem
from scrapy.http import Request, FormRequest
class viagogoSpider(CrawlSpider):
name="viagogo"
allowed_domains=['viagogo.com']
start_urls = ["http://www.viagogo.com/Concert-Tickets/Rock-and-Pop"]
rules = (
# Running on pages
Rule(SgmlLinkExtractor(restrict_xpaths=('//*[@id="clientgridtable"]/div[2]/div[2]/div/ul/li[7]/a')), callback='Parse_Page', follow=True),
# Running on artists in title
Rule(SgmlLinkExtractor(restrict_xpaths=('//*[@id="clientgridtable"]/table/tbody')), callback='Parse_artists_Tickets', follow=True),
)
#all_list = response.xpath('//a[@class="t xs"]').extract()
def Parse_Page(self, response):
item = ViagogoItem()
item["title"] = response.xpath('//title/text()').extract()
item["link"] = response.url
print 'Page!' + response.url
yield Request(url=response.url, meta={'item': item}, callback=self.Parse_Page)
def Parse_artists_Tickets(self, response):
item = ViagogoItem()
item["title"] = response.xpath('//title/text()').extract()
item["link"] = response.url
print response.url
with open('viagogo_output', 'a') as f:
f.write(str(item["title"]) + '\n')
return item
我不明白我做错了什么,但输出(在文件内)只是第一页显示。。在
谢谢!在
这个:
要求Scrapy再次爬网之前爬过的同一页,而不是真正前进到下一页。Scrapy默认启用了一个dupefilter,它可以避免发出重复的请求,这可能就是为什么第二个请求没有发生,第二个回调永远不会被调用。在
如果要继续解析同一响应中的更多项,可以直接调用第二个回调来传递响应。在
^{pr2}$如果你想转到另一个页面,你必须向一个以前看不到的URL发出请求。在
相关问题 更多 >
编程相关推荐