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

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

我正试图从这个网站上删除所有的职业页面:

我尝试了以下方法,但不幸的是,只有当您单击其中一个公司页面时,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
我注意到每个
  • 都包含包含作业页面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