【问题标题】:Looping on Scrapy doens't work properly在 Scrapy 上循环无法正常工作
【发布时间】:2013-11-27 12:15:41
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: scrapy web-crawler


    【解决方案1】:

    你可以覆盖CrawlSpider中的parse_start_url()方法:

    class MySpider(CrawlSpider):
    
        def parse_items(self, response):
            # put your code here
            ...
    
        parse_start_url = parse_items
    

    【讨论】:

    • 谢谢@kev - 它有效!虽然我真的不明白为什么;)
    【解决方案2】:

    您的规则允许带有 "&pageinfo=\d" 的网址。实际上,只会处理具有匹配 url 的页面。您需要更改要处理的没有 pageinfo 的 url 的允许参数。

    【讨论】:

    • 谢谢@Biswanath。你说的有道理,但我根据本教程编写了我的代码:link 似乎他遇到了同样的问题(“允许”规则似乎与第一个 URL 不匹配),但不知何故它起作用了在他的项目上......
    猜你喜欢
    • 2019-01-01
    • 2014-12-02
    • 2013-08-09
    • 2013-10-30
    • 2013-10-19
    • 2017-02-03
    相关资源
    最近更新 更多