Можно ли очистить атрибуты данных 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
пример показанный выше - просто прочитайте док.