我需要提取页面上的所有链接,然后从每个链接中获取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,并且页面不是特定的,它可以是任何一个。
我尝试了两种其他方法都无济于事:
仅返回href
:
for r in response.css('a::attr(href)').getall():
print(r)
不返回href
,仅返回text
le = LinkExtractor()
for link in le.extract_links(response):
print(link.url)
print(link.text)
它必须与Scrapy配合使用,BeautifulSoup不合适。
答案 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。