提取链接图

时间:2017-07-25 23:17:06

标签: scrapy

有人能告诉我是否可以对抓取工具提取的链接进行一些分析?我知道有分析API,但我无法弄清楚如何使用它,而且文档很少。

我正在尝试解决为什么我的抓取工具正在提取某些链接而不是其他链接。例如,我在主页上开始抓取,其中包含指向包含单词business的网址的链接,但以下规则不会返回任何项目。

rules = (
        Rule(LinkExtractor(allow=('business', )), callback='parse_item', follow=True),
    )

如果有办法记录某些提取链接的图表,那将会很棒。但是我找不到实现它的方法。

2 个答案:

答案 0 :(得分:2)

你误解了scrapy LinkExtractor的参数:

  

allow(正则表达式(或列表)) - 一个正则表达式(或正则表达式列表),(绝对) URL必须匹配才能被提取。如果没有给出(或为空),它将匹配所有链接。

你可以在python shell中测试你的linkextractors:

>: from scrapy.linkextractors import LinkExtractor
>: from scrapy.http import HtmlResponse
>: body = "<a href=/somewhere.html>business</a>"
>: resp = HtmlResponse('http://example.com', 200, body=body, encoding='utf8')
>: LinkExtractor().extract_links(resp)
<: [Link(url='http://example.com/somewhere.html', text='business', fragment='', nofollow=False)]
>: LinkExtractor(allow='business').extract_links(resp)
<: []

要匹配文字,您可以使用restrict_xpath参数:

>: LinkExtractor(restrict_xpaths='//*[contains(text(),"business")]').extract_links(re
   sp)
<: [Link(url='http://example.com/somewhere.html', text='business', fragment='', nofollow=False)]

查看LinkExtractor

的官方文档

答案 1 :(得分:1)

我认为测试规则的更简单方法是使用LinkExtractor测试您的scrapy shell obj,并假设您正在谈论我认为CrawlSpider的{​​{1}}。没有内置的方式。尽管如此,如果您想生成某种有向图,您可以继承LinkeExtractor并覆盖extract_links方法以打印&#34;图形边缘&#34;像:

logger = logging.getLogger('VerboseLinkExtractor')
class VerboseLinkExtractor(LinkExtractor):
    def extract_links(self, response):
        links = super(Graph, self).extract_links(response)
        for link in links:
            logger.debug("{} ==> {}".format(response.url, link.url)) # or a simple print
        return links