【问题标题】:lxml isn't finding xpath given by Chrome?lxml 没有找到 Chrome 提供的 xpath?
【发布时间】:2017-02-16 23:04:15
【问题描述】:

我正在尝试从链接的搜索页面获取公司的行业。我从 Chrome 的开发工具中获取 xpath,但它返回空括号。这里似乎有什么问题?

from lxml import html
import requests

page = requests.get('https://www.linkedin.com/search/results/companies/?keywords=cisco.com')
tree = html.fromstring(page.content)

industry = tree.xpath('//*[@id="ember3734"]/div/div[1]/p[1]')

print(industry)

【问题讨论】:

    标签: python html xml parsing lxml


    【解决方案1】:

    我使用 selenium 和 phantomjs 制作了脚本,因为该网站使用了大量的 javascript。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import lxml.html
    import re
    from selenium import webdriver
    from time import sleep
    from selenium.webdriver import DesiredCapabilities
    from pprint import pprint 
    
    desired_capabilities = DesiredCapabilities.PHANTOMJS.copy()
    desired_capabilities['phantomjs.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) ' \
                                                                      'AppleWebKit/537.36 (KHTML, like Gecko) ' \
                                                                      'Chrome/39.0.2171.95 Safari/537.36'
    driver = webdriver.PhantomJS(desired_capabilities=desired_capabilities)
    
    username = 'email@email.com'
    password = 'password'
    
    
    # driver = webdriver.PhantomJS()
    driver.set_window_size(1120, 550)
    driver.get("https://www.linkedin.com")
    
    driver.find_element_by_id('login-password').send_keys(password)
    driver.find_element_by_id('login-email').send_keys(username)
    driver.find_element_by_id("login-submit").click()
    driver.get("https://www.linkedin.com/search/results/companies/?keywords=cisco.com")
    sleep(3)
    html = driver.page_source
    root = lxml.html.fromstring(html)
    
    reg = re.compile('ember-view\">\s+<h3\s+class=\"search\-result__title\s+Sans\-17px\-black\-85\%\-semibold-dense\">(.*?)<\/h3>')
    names =  reg.findall(html)
    
    pprint(names)
    
    driver.quit()
    

    【讨论】:

    • 非常感谢!我可以使用任何驱动程序还是必须是 PhantomJS?
    • 我认为 Phantomjs 更好,但这是个人意见。使用 firefox 或 google chrome,您将获得相同的结果。但我认为 phantomjs 更轻。
    • @opamp 你可以使用这个gist.github.com/Wu4m4n/597367d32e443b9fe120f47d78d56bce来安装phantomjs
    • 谢谢!我对那个有问题,所以我下载了它并将路径包含在 webdriver.PhantomJS
    • 仔细看看这个,我想我会自己弄清楚,因为我实际上需要公司的行业而不是名称。有没有一种简单的方法可以深入了解并获得以下信息:Cisco -> Computer Networking?
    【解决方案2】:

    我认为页面是由 JavaScript 生成的。由于请求在不执行 JavaScript 的情况下下载页面,因此您只能获得主页/模板,而不是您期望的数据。

    尝试在Chrome下“查看源页面”进行确认。

    【讨论】:

    • 感谢您的评论。当我在我的mac上时,我会尝试一下。那么在这种情况下我将如何提取我需要的数据呢?
    猜你喜欢
    • 2015-01-10
    • 2016-03-25
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 2023-04-02
    • 2019-07-31
    • 1970-01-01
    • 2012-09-13
    相关资源
    最近更新 更多