【问题标题】:Scrapy LinkExtractor cannot extract links with href of mailto:Scrapy LinkExtractor 无法提取带有 mailto 的 href 的链接:
【发布时间】:2016-04-27 05:32:41
【问题描述】:

我正在使用 LinkExtractor 类从页面中提取所有链接

for link in LinkExtractor(allow=()).extract_links(response):
    print link.url

这会打印页面中的所有 URL。但我似乎无法获得 href 等于 mailto: 链接的链接。例如:

<a href="mailto:example@gmail.com">Mail</a>

我是否需要向 LinkExtractor 传递一些参数以使其使用 mailto: 抓取链接?

【问题讨论】:

    标签: python hyperlink scrapy


    【解决方案1】:

    您不需要使用LinkExtractor 来获取您需要的url,只需将xpath 与响应对象一起使用即可。

    all_links = response.xpath('//a/@href').extract()
    

    LinkExtractor 专注于获取要关注的链接,因此它默认避免使用 mailto 链接。

    【讨论】:

    • 感谢您的建议。我使用 LinkExtractor 的原因是因为我想提取不属于特定域的链接,就我而言,我想获取所有外部链接。所以,我正在做的是 `LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response)`。有没有一种方法可以使用您的方法实现这一目标?
    • 如果您确实想使用 LinkExtractor,也许@GHajba 解决方案会有所帮助。但您可以迭代您拥有的链接并获得您想要的链接。
    【解决方案2】:

    嗯,BeautifulSoup 将是一个替代品。

    但这不会回答您的问题。问题的原因是 LxmlLinkExtractor(这是 scrapy 中的默认 LinkExtractor)有一个过滤(因为它扩展了 FilteringLinkExtractor),它有一个用于有效 URL 的 lambda 并过滤它们。这个表达式如下:

    _is_valid_url = lambda url: url.split('://', 1)[0] in {'http', 'https', 'file'}
    

    如您所见,mailto 在这种情况下无效。

    您也可以编写自己的实现,允许 mailto 作为有效的 URL - 但是您必须小心,因为 LinkExtractors 会自动创建 Request 并调用它们获得的 URL,因此您最终会遇到异常用于电子邮件地址。

    如果您想收集电子邮件地址,请创建另一个解析器函数,从网站中提取它们 - 并让 LinkExtractor 遍历整个网站及其所有内部链接。

    【讨论】:

      【解决方案3】:

      您为什么不使用 BeautifulSoup 来完成这项任务?

      r = requests.get( url, params )
      
      soup = BeautifulSoup( r.text, 'html.parser' )
      
      #Getting all h3 tags with class 'r'
      h3tags = soup.find_all( 'h3', class_='r' )
      
      for h3 in h3tags:
      

      【讨论】:

      • 因为我有几万页要爬,BeautifulSoup 很慢。
      • 确实如此。我已经报废了近 100,000 页,我尝试了其他方式,如 googleAPI 和 JSON 等,但谷歌限制不允许任何人报废超过 100 页,但使用请求和 BeautifulSoup 我报废了近 100,000 页。但是是的,它很慢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 2017-11-10
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多