如何用lxml从href属性解析提取网页文件实际链接?
修改代码提取标签的href属性
原代码仅提取了<td>标签的文本内容,要获取<a>标签href属性中的实际链接,需要定位到<a>元素并读取其属性值,以下是两种修改方案:
方案1:直接提取页面所有标签的href
直接通过XPath定位页面中所有<a>标签,批量提取href属性:
import requests from lxml import html url = "你的目标网页URL" web_string = requests.get(url).content parsed_content = html.fromstring(web_string) # 提取所有含href属性的<a>标签链接 directive_list = [a.get('href') for a in parsed_content.xpath('//a') if a.get('href')]
方案2:延续原逻辑在内查找标签
如果只需要提取<td>标签下的链接,可在遍历每个<td>时,查找其内部的<a>标签:
import requests from lxml import html url = "你的目标网页URL" 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: # 在当前<td>下查找所有<a>标签 for a_tag in td_e.xpath('.//a'): href = a_tag.get('href') if href: directive_list.append(href)
注意事项
- 若提取的href是相对路径(如示例中的
file1.pdf),下载前需用urllib.parse.urljoin(url, href)拼接成完整URL,确保请求有效。 - 代码中保留了
if href判断,用于过滤没有设置href属性的无效<a>标签。
内容的提问来源于stack exchange,提问作者elbillaf
相关产品推荐
相关产品推荐

