【问题标题】:Scrapy Reverse CrawlScrapy 反向爬行
【发布时间】:2012-12-30 19:52:08
【问题描述】:

蜘蛛从一个页面中抓取一些特定的链接。然后它会在每个页面中搜索一个 youtube 链接和一个名称以识别它(页面标题)。它确实找到了我需要的所有链接,但是顺序很奇怪。

蜘蛛从下到上收集所有页面信息。我怎样才能让它从上到下?

我的蜘蛛:http://pastebin.com/5qLKr6ky

输出:http://pastebin.com/j4h4aRMs

起始页:它在蜘蛛中(我不能发布超过2个链接,因为我是新用户)

我希望输出与起始页中的顺序相同。

【问题讨论】:

    标签: python scrapy web-crawler


    【解决方案1】:

    我不知道scrapy,但我知道您可以通过调用reversed 来反转python 中的列表或其他可迭代对象。

    【讨论】:

    • 谢谢,但这不是我所需要的。这份名单不仅仅是颠倒的。有很多链接是随机顺序的,我不知道为什么。这很难解释,但如果你能看一下输出,它就会变得更清楚。
    【解决方案2】:

    哦,您的意思是您需要生成的 Youtube 链接按照它们放置在起始页上的顺序?

    链接是随机顺序的,因为 Scrapy 并行发出请求

    class ProfessormesserSpider(BaseSpider):
    
        allowed_domains = ['www.professormesser.com']
        start_urls = ['http://www.professormesser.com/n10-005/free-network-plus/']
    
        def parse(self, response):
            # extract urls from start page and REMEMBER THEIR ORDER(!!!)
            hxs = HtmlXPathSelector(response)
            for i, link in enumerate(hxs.xpath("//td[@valign='center']/div/descendant::a/@href")):
                # "i" is the link's order
                yield yield Request(url=link, callback=self.parse_item, meta={'i': i})
    
        def parse_item(self, request):
            order = response.request.meta["i"]
            ...
    

    【讨论】:

      【解决方案3】:

      如果您查看其中一个链接页面的页面源,它​​会包含指向上一个和下一个视频的链接。这些链接采用这种形式:

      <div class="entry clearfix">
      ...
      <b>Next:</b> The TCP/IP Model  &gt;&gt;</a><br />
      <center><iframe width="640" height="360" src="http://www.youtube.com/embed/lSK1d8fZyEw?rel=0" frameborder="0" allowfullscreen></iframe></center></p>
      </div>
      

      因此,您会收到重复的条目(尽管链接不同)。您可能需要开发一个更明确的 xpath 来过滤掉这些其他链接。

      【讨论】:

        猜你喜欢
        • 2013-01-24
        • 2015-10-18
        • 2014-12-31
        • 1970-01-01
        • 2021-02-10
        • 2015-02-19
        • 2019-06-24
        • 2014-09-23
        • 1970-01-01
        相关资源
        最近更新 更多