我正在尝试用Scrapy编写一个小型网络爬虫。
我编写了一个爬虫程序,它抓取某个页面上某些链接的URL,并将链接写入csv文件。然后,我编写了另一个循环访问这些链接的爬虫,并从指向这些链接的页面下载了一些信息。
链接上的循环:
cr = csv.reader(open("linksToCrawl.csv","rb"))
start_urls = []
for row in cr:
start_urls.append("http://www.zap.co.il/rate"+''.join(row[0])[1:len(''.join(row[0]))])
例如,如果我正在检索信息的页面的URL是:
http://www.zap.co.il/ratemodel.aspx?modelid=835959
然后可以(有时)从以下页面中检索更多信息,例如:
http://www.zap.co.il/ratemodel.aspx?modelid=835959&pageinfo=2 (“& pageinfo = 2”已添加)。
因此,我的规则是:
rules = (Rule (SgmlLinkExtractor (allow = ("&pageinfo=\d",
), restrict_xpaths=('//a[@class="NumBtn"]',))
, callback="parse_items", follow= True),)
似乎工作正常。但是,爬虫似乎仅从具有扩展URL的页面(带有“& pageinfo = \ d”)检索信息,而不是没有它们的页面。我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
您可以在CrawlSpider
中覆盖parse_start_url()
方法:
class MySpider(CrawlSpider):
def parse_items(self, response):
# put your code here
...
parse_start_url = parse_items
答案 1 :(得分:0)
您的规则允许网址为“& pageinfo = \ d”。实际上,只会处理具有匹配网址的网页。您需要更改URL的allow参数,而不需要处理pageinfo。