Python 是否可以使用XPath选择器(lxml)刮取html数据属性?
我正试图从这个网站上删除所有的职业页面: 我尝试了以下方法,但不幸的是,只有当您单击其中一个公司页面时,HREF才会出现:Python 是否可以使用XPath选择器(lxml)刮取html数据属性?,python,html,xpath,lxml,custom-data-attribute,Python,Html,Xpath,Lxml,Custom Data Attribute,我正试图从这个网站上删除所有的职业页面: 我尝试了以下方法,但不幸的是,只有当您单击其中一个公司页面时,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/@hre
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
我注意到每个
都包含包含作业页面URL的html数据属性。因此,是否可以从每个
中刮取数据hiringurl属性。如果不使用lxml和XPath选择器,它们的其他选项是什么
这是我想从中提取的
元素之一。我特别想提取hiringurl=”的数据http://www.admeld.com/about/jobs/“此元素的xpath为/*[@id=“v7”]
通过lxml搜索预期内容
这假设您已经拥有包含所需数据的页面内容。代码显示了通过http请求获取它,如果它需要在浏览器中呈现,请参阅我回答的后面部分如何获取它
如果要获取属性数据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
现在,您在页面
中有了页面的可变内容,您可以按照上述说明继续执行lxml
注意:我不保证,你会在页面中得到预期的内容,我只知道,它是以呈现形式出现的。但是,如果您需要通过单击页面上的某些元素、填写一些文本、按下按钮来继续操作,所有这些都可以通过上面显示的
浏览器实例来完成-只需阅读文档即可。您实际上是在问,如何从特定的html文档中查找特定的URL。如果您提供给定的文档或其相关路径,则会有所帮助。无论如何,您已经走上了正轨——lxml将允许您使用XPath(选择您需要的内容),或者允许对内容进行迭代,逐个测试并提取您需要的内容。很可能,一个好的XPath表达式就能解决您的任务。@JanVlcinsky我编辑了上面的文章。我知道如何使用xpath获取href,但我不知道如何使用它捕获html数据属性。这将返回一个空列表。如果您使用chrome开发工具并检查其中一家在右边横栏上显示“我们正在招聘”的公司的元素,则可以找到data hiringurl属性。编辑:所有公司都有data hiringurl属性,尽管有些是空的。@Barnaby如果这些data hiringurl
属性由JavaScript填充,则请求将不会将其带到lxml
。您应该查看机械化
或seleninum驱动程序。我假设情况就是这样。我将调查机械化或selenium@Barnaby我添加了一个示例,如何使用selenium
获取页面内容。
>>> from selenium import webdriver
>>> browser = webdriver.Firefox()
>>> url = "http://wearemadeinny.com/find-a-job/"
>>> browser.get(url)
>>> page = browser.page_source
>>> print page