是否可以使用XPath选择器(lxml)来刮取html数据属性?

met*_*rsk 1 html python xpath lxml custom-data-attribute

我试图从这个网站上抓取所有职业页面:http://wearemadeinny.com/find-a-job/

我尝试了下面的内容,但遗憾的是,当您点击其中一个公司页面时,只显示href:

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
Run Code Online (Sandbox Code Playgroud)

我注意到每个都<li>包含html数据属性,其中包含作业页面URL.那么,是否有可能从每个数据中删除data-hiringurl属性<li>.如果没有lxml和XPath选择器是他们的其他选择?

这是<li>我想要从中获取的元素之一.我特意想拉数据-hiringurl ="http://www.admeld.com/about/jobs/"这个元素的xpath是//*[@ 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>
Run Code Online (Sandbox Code Playgroud)

Jan*_*sky 5

通过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
Run Code Online (Sandbox Code Playgroud)

但我不确定,如果您提供的网址包含此类数据.我没有在那里找到它.

获取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
Run Code Online (Sandbox Code Playgroud)

现在您拥有page页面的可变内容,您可以继续进行lxml上述操作.

注意:我不保证,您将在页面中获得预期的内容,我只知道,它以渲染的形式出现.但是如果你需要点击页面上的一些元素,填写一些文本,按下按钮,所有这些都可以通过browser上面显示的实例完成- 只需阅读doc.