Как получить URL из href, который сам по себе является гиперссылкой? - PullRequest
0 голосов
/ 15 февраля 2019

Я использую Python и lxml, чтобы попытаться очистить эту HTML-страницу .Проблема, с которой я сталкиваюсь, заключается в попытке извлечь URL из текста гиперссылки "Chapter02a".(Обратите внимание, что я не могу заставить форматирование ссылок работать здесь.)

<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])

Я хочу, чтобы section был списком URL-адресов подразделов.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Можно также выполнить конкатенацию непосредственно на уровне 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)

output:

https://www.math.wisc.edu/~mstemper2/Math/Pinter/Chapter02A
0 голосов
/ 15 февраля 2019

Возвращаемый результат верен, поскольку Chapter02a является «относительной» ссылкой на следующий раздел.Полный URL-адрес отсутствует в списке, поскольку он не хранится в HTML-файле.

Чтобы получить полный URL-адрес, вы можете использовать:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...