如何使用Scrapy从页面中提取所有链接(href +文本)

时间:2020-07-26 23:09:39

标签: python scrapy

我需要提取页面上的所有链接,然后从每个链接中获取href及其相应的text

如果任何页面共有3个链接:

<a href="https://www.stackoverflow.com">This is the Stackoverflow page</a>
<a href="https://example.com">This is an example link</a>
<a href="tel:+99999999999">This is my phone</a>

我需要这样的结果:

links = {
    "https://www.stackoverflow.com": "This is the Stackoverflow page",
    "https://example.com": "This is an example link",
    "tel:+99999999999": "This is my phone"
}

所以目标是要知道text X属于href Y,并且页面不是特定的,它可以是任何一个。

我尝试了两种其他方法都无济于事:

  1. 仅返回href

    for r in response.css('a::attr(href)').getall():
        print(r)
    
  2. 不返回href,仅返回text

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

它必须与Scrapy配合使用,BeautifulSoup不合适。

1 个答案:

答案 0 :(得分:1)

要保持您发布的格式:

for r in response.css('a'):
    url = r.css('::attr(href)').get()
    txt = r.css('::text').get()

response.css('a')将返回selectors的列表。

r在for循环的每次迭代中将是一个不同的选择器。

由于r是选择器,因此可以使用.css()(或.xpath())方法访问该节点的任何路径或属性。在这种情况下,请输入文字和href。