为了账号安全,请及时绑定邮箱和手机立即绑定

如何从href中获取URL本身就是一个超链接?

如何从href中获取URL本身就是一个超链接?

炎炎设计 2021-11-09 17:00:11
我正在使用 Python 和 lxml 尝试抓取此 html 页面。我遇到的问题是试图从这个超链接文本“Chapter02a”中获取 URL。(请注意,我似乎无法在此处使用链接格式)。<li><a href="[Chapter02A](https://www.math.wisc.edu/~mstemper2/Math/Pinter/Chapter02A)">Examples of Operations</a></li>我试过了//ol[@id="ProbList"]/li/a/@href但这只会给我文本“Chapter02a”。还://ol[@id="ProbList"]/li/a这将返回一个 lxml.html.HtmlElement'object,并且我在文档中找到的所有属性都无法完成我想要做的事情。from lxml import htmlimport requestschapter_req = requests.get('https://www.math.wisc.edu/~mstemper2/Math/Pinter/Chapter02')chapter_html = html.fromstring(chapter_req.content)sections = chapter_html.xpath('//ol[@id="ProbList"]/li/a/@href')print(sections[0])我希望部分是小节的 URL 列表。
查看完整描述

2 回答

?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

您看到的返回是正确的,因为它Chapter02a是指向下一部分的“相对”链接。未列出完整的 url,因为这不是它在 html 中的存储方式。


要获取完整的网址,您可以使用:


url_base = 'https://www.math.wisc.edu/~mstemper2/Math/Pinter/'

sections = chapter_html.xpath('//ol[@id="ProbList"]/li/a/@href')

section_urls = [url_base + s for s in sections]


查看完整回答
反对 回复 2021-11-09
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您也可以直接在XPATH级别进行串联以从相对链接重新生成 URL:


from lxml import html

import requests


chapter_req = requests.get('https://www.math.wisc.edu/~mstemper2/Math/Pinter/Chapter02')

chapter_html = html.fromstring(chapter_req.content)

sections = chapter_html.xpath('concat("https://www.math.wisc.edu/~mstemper2/Math/Pinter/",//ol[@id="ProbList"]/li/a/@href)')

print(sections)

输出:


https://www.math.wisc.edu/~mstemper2/Math/Pinter/Chapter02A


查看完整回答
反对 回复 2021-11-09
  • 2 回答
  • 0 关注
  • 246 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信