【问题标题】:Scrapy get all external Links of URLScrapy获取URL的所有外部链接
【发布时间】:2014-12-23 09:17:32
【问题描述】:

我使用 scrapy 抓取整个网站 (allow_domains = mydomain.com)。现在我想从当前 URL 获取所有外部链接(到另一个域)。如何将它集成到我的 spider.py 中以获取包含所有外部 URL 的列表?

【问题讨论】:

  • 获取所有外部链接是什么意思?所有重定向到另一个域的 标签?
  • 我只想要我处理的当前 URL 中的所有 [sometext] 。我使用这个规则 atm: rules = ( Rule(SgmlLinkExtractor(), callback='get_domain_data', follow=True), )
  • 使用scrapy链接提取器有什么问题?

标签: hyperlink scrapy external


【解决方案1】:

尝试使用Link Extractors。这可以是一个例子:

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.item import Item, Field


class MyItem(Item):
    url= Field()


class MySpider(CrawlSpider):
    name = 'twitter.com'
    allowed_domains = ['my-domain.com']
    start_urls = ['http://www.my-domain.com']

    rules = (Rule(SgmlLinkExtractor(), callback='parse_url', follow=False), )

    def parse_url(self, response):
        item = MyItem()
        item['url'] = response.url
        return item

【讨论】:

  • 好的,我已经使用了 SgmlLinkExtractor。我认为 Scrapy 还有另一个实用程序可以非常简单地获取外部链接。然后我用 xpath() 试试
  • 总是有不同的方法。您可以使用 xpath 从页面中获取所有a/@href,并通过诸如urlparse 之类的库对其进行分析,以提取域并将其与当前域进行比较。这可以是一个例子(stackoverflow.com/questions/26998433/…)
  • 我的思路有问题。我只想要带有外部目标的 href="x" 。 (otherdomain.com)。但是,当 href 属性中没有域时,我如何使用相对 URL 检查这些?有什么想法吗?
  • 您的意思是当 href 属性类似于 href="javascript:void()"href="\cat\link1" 时。对吗?
  • 是的。我试过这样的东西,但效果不好: //a[( contains(@href,'http://') 或 contains(@href,'https://') ) 而不是(contains( @href,'" + self.domain +"') )]/@href
猜你喜欢
  • 2015-12-31
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多