循环使用Scrapy不能正常工作

时间:2013-11-26 14:33:52

标签: scrapy web-crawler

我正在尝试用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”)检索信息,而不是没有它们的页面。我该如何解决这个问题?

谢谢!

2 个答案:

答案 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。