как получить xpath href в плотном html дереве - PullRequest
0 голосов
/ 05 апреля 2020

Я пытаюсь получить href данные для приведенного ниже URL

url = r'https://pubmed.ncbi.nlm.nih.gov/?term=COVID-19&filter=simsearch1.fha&page=1'

, используя приведенный ниже код

lxml.html.fromstring(url).xpath('//div[contains(@class,"inner-wrap")]//div/a[contains(@class,"labs-docsum-title")]//@href')

Я пробовал ряд других альтернатив для строки внутри xpath, такой как

.xpath('.//div/a/@href')

и

.xpath(r'/html/body/main/div[8]/div[2]/section/div[1]/div/article[1]/div[2]/div[1]/a[1]/@href')

, но каждый раз я получаю пустой []. Я считаю, что не понимаю правильное дерево иерархии (родитель-потомок), но не могу понять, что не так. Мое желаемое решение может выглядеть примерно так:

print(href)
"/32139372/?from_term=COVID-19&from_filter=simsearch1.fha&from_page=1&from_pos=1" 

для первого элемента в итерации

1 Ответ

0 голосов
/ 05 апреля 2020

Попробуйте что-то вроде:

url = "https://pubmed.ncbi.nlm.nih.gov/?term=COVID-19&filter=simsearch1.fha&page=1"
resp = requests.get(url)
doc = lxml.html.fromstring(resp.text)
links = doc.xpath('//div/a[@class="labs-docsum-title"]')
print(links[0].attrib.get('href'))

Вывод:

/32139372/?from_term=COVID-19&from_filter=simsearch1.fha&from_page=1&from_pos=1
...