我正试图从这个网站上抓取所有职业网页: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
我注意到每个<li>
都包含html数据属性,其中包含作业页面网址。那么,是否有可能从每个<li>
中删除data-hiringurl属性。如果没有lxml和XPath选择器是他们的其他选择吗?
这是我想要提取的<li>
元素之一。我特别想拉数据-hiringurl =&#34; http://www.admeld.com/about/jobs/"此元素的xpath是// * [@ id =&#34; v7&#34;]
<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 :(得分:5)
这假设您已经拥有包含所需数据的页面内容。该代码显示了通过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
但我不确定,如果您提供的网址包含此类数据。我没有在那里找到它。
如果页面获取了您感兴趣的内容在客户端上动态呈现,则需要提供浏览器上下文并让它在那里呈现。使用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
实例完成 - 只需阅读文档。