我正在使用Python和lxml尝试抓取this html page。我遇到的问题是试图从此超链接文本“ 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对象,并且我在文档中找到的所有属性都无法完成我想做的事情。
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])
我希望 sections 是这些小节的URL列表。
答案 0 :(得分:1)
您看到的回报是正确的,因为Chapter02a
是指向下一部分的“相对”链接。完整网址未列出,因为它不是在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]
答案 1 :(得分:1)
您也可以直接在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