Можно ли очистить атрибуты данных html с помощью селекторов XPath (lxml)?

Я пытаюсь почистить все страницы с вакансиями на этом сайте: http://wearemadeinny.com/find-a-job/

Я попробовал следующее, но, к сожалению, hrefs появляются только при нажатии на одну из страниц компании:

from lxml import html
import requests

page = requests.get("http://wearemadeinny.com/find-a-job/")
tree = lxml.html.fromstring(page.text)

jobs = tree.xpath('//*[@id="venue-hiring"]/a/@href')

links = [x for x in jobs]

print links

Я заметил, что каждый <li> содержит атрибуты данных HTML, которые содержат URL страницы работы. Итак, возможно ли очистить атрибут data-hiringurl от каждого <li>, Если не с lxml и XPath селекторы, их другие варианты?

Это один из <li> элементы, которые я хотел бы извлечь из. Я специально хотел бы вытащить data-hiringurl="http://www.admeld.com/about/jobs/". Путь к этому элементу: //*[@id="v7"]

<li id="v7" data-vid="7" data-name="Admeld" data-address="230 Park Avenue South Suite 1201" data-lat="40.7378349" data-long="-73.9886703" data-url="http://www.admeld.com/" data-hiring="1" data-hiringurl="http://www.admeld.com/about/jobs/" data-whynyc="" data-category="1"><a href="#" class="list-digital">
<span class="venue-name">Admeld</span><br>
<span class="venue-address">230 Park Avenue South</span>
<br><span class="venue-hiring">We are hiring!</span>                                    
</a>
</li>

1 ответ

Решение

Поиск ожидаемого контента с помощью lxml

Это предполагает, что у вас уже есть содержимое страницы, содержащей необходимые данные. Код показывает выборку по http-запросу, если он требует рендеринга в браузере, см. Позже в части моего ответа, как получить его.

Если вы хотите получить все значения в атрибуте data-hiringurlпопробуйте XPath //@data-hiringurl

from lxml import html
import requests

url = "http://wearemadeinny.com/find-a-job/"

page = requests.get(url)
tree = html.fromstring(page.text) # corrected, used to be `lxml.html.fromstring`

xp = "//@data-hiringurl"
job_urls = tree.xpath(xp)

print print job_urls

Но я не уверен, что предоставленные вами URL содержат такие данные. Я не нашел его там.

Получение содержимого страницы с помощью JavaScript

Если страница получает интересующее вас содержимое, динамически отображаемое на клиенте, вам необходимо предоставить контекст браузера и позволить ему отображаться там. С помощью selenium могу сделать работу:

>>> from selenium import webdriver
>>> browser = webdriver.Firefox()
>>> url = "http://wearemadeinny.com/find-a-job/"
>>> browser.get(url)
>>> page = browser.page_source
>>> print page

Теперь у вас есть в page переменное содержимое страницы, и вы можете продолжить lxml как описано выше.

Примечание: я не гарантирую, вы получите ожидаемый контент на странице, я знаю только, что он представлен в визуализированном виде. Но если вам нужно продолжить, нажав на некоторые элементы на странице, заполнив некоторый текст, нажав кнопки, все, что можно сделать, browser пример показанный выше - просто прочитайте док.

Другие вопросы по тегам