使用 lxml 解析来自 href 的实际链接 [duplicate]

parsing actual link from href using lxml [duplicate]

提问人:elbillaf 提问时间:10/27/2023 最后编辑:chqrlieelbillaf 更新时间:10/30/2023 访问量:28

问:

使用 jupyter notebook、python 3。 我正在从网络上下载一些文件,其中大部分是在本地批量下载的。这些文件列在网页上,但它们位于 href 属性中。我找到的代码给了我文本,但没有实际的链接(即使我的理解是代码应该得到链接)。

这是我所拥有的:

import os
import requests
from lxml import html
from lxml import etree
import urllib.request
import urllib.parse
...
web_string = requests.get(url).content
parsed_content = html.fromstring(web_string)
td_list = [e for e in parsed_content.iter() if e.tag == 'td']

directive_list = []
for td_e in td_list:
   txt = td_e.text_content()
   
   directive_list.append(txt)

这是一个很长的网页,里面有一堆条目,看起来像<a href="file1.pdf"> text1 </a>

此代码返回:text1、text2 等,而不是 file1.pdf、file2.pdf

如何提取链接?

Python 解析 LXML

评论

1赞 Charles Duffy 10/27/2023
href是所谓的“属性”(锚点),而不是文本内容。a
1赞 Barmar 10/27/2023
您需要选择元素,而不是 .然后使用atdelement.attrib['href']
1赞 Barmar 10/27/2023
可以使用 XPath 查找所有元素,而不是循环访问所有元素。a

答:

2赞 Yuri R 10/27/2023 #1

您可以修改代码以专门查找每个元素中的元素并提取其属性。atdhref

import requests
from lxml import html

url = 'YOUR_URL_HERE'  # Replace with your URL
web_string = requests.get(url).content
parsed_content = html.fromstring(web_string)

# Find all 'a' elements inside 'td' elements
links = parsed_content.xpath('//td/a')

directive_list = []
for link in links:
    # Get the href attribute
    href = link.get('href')

    # You might want to join this with the base URL if they are relative links
    # href = urllib.parse.urljoin(url, href)

    directive_list.append(href)

# Print the list of links
print(directive_list)