2014-05-05 33 views
1

我试图刮掉所有从本网站的职业生涯网页:http://wearemadeinny.com/find-a-job/是否可以使用XPath选择器(lxml)来刮取html数据属性?

我试过以下,但不幸的是,当你点击该公司网页的一个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 

我注意到每个<li>都包含包含作业页面url的html数据属性。那么,是否有可能从每个<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> 
+0

你实际上在问,如何从特定的html文档中找到特定的url。如果您提供给定的文件或它的相关路径,这将有所帮助。无论如何,您的工作进展顺利 - lxml将允许您使用XPath,它将选择您需要的内容,或者允许迭代内容并逐个执行测试用例并提取您需要的内容。很可能,一个傀儡XPath表达式将解决您的任务。 –

+0

@JanVlcinsky我编辑我的帖子上面。我知道如何使用xpath获取href,我只是不知道如何使用它来捕获html数据属性。 – metersk

回答

4

通过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 

但我不知道,如果你提供的网址包含这样的数据。我没有在那里找到它。

获得由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实例完成所有操作 - 只需阅读doc。

+0

这是返回一个空列表。如果您使用chrome开发工具并检查其中一家公司上的“我们正在招聘”右侧导轨上的元素,则可以找到data-hiringurl属性。编辑:所有的公司都有数据招聘的属性,尽管有些是空的。 – metersk

+0

@Barnaby如果这些'data-hiringurl'属性是由JavaScript填充的,那么'requests'不会把它带到'lxml'。你应该看看“机械化”或者“硒”司机。 –

+0

我认为这是事实。我会调查机械化或硒 – metersk