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

我正在使用 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 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('//ol[@id="ProbList"]/li/a/@href')

print(sections[0])

我希望部分是小节的 URL 列表。


炎炎设计
浏览 247回答 2
2回答

慕田峪7331174

您看到的返回是正确的,因为它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]

摇曳的蔷薇

您也可以直接在XPATH级别进行串联以从相对链接重新生成 URL: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('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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python