开发者问题收集

Python request.get(url) 返回 javascript 代码而不是页面 html

2019-01-28
7495

我有一个非常简单的问题。我试图从 linkedIn 页面的 html 中获取职位描述,但我得到的不是页面的 html,而是几行看起来像 javascript 代码的代码。我对这个很陌生,所以任何帮助都将不胜感激!谢谢

这是我的代码:

import requests
url = "https://www.linkedin.com/jobs/view/inside-sales-manager-at-stericycle-1089095836/"
page_html = requests.get(url).text
print(page_html)

当我运行这个时,我没有得到我期望的包含职位描述的 html...我只得到了几行 javascript 代码。

2个回答

某些网站会根据访问网站的浏览器类型呈现不同的内容。LinkedIn 就是这种行为的完美示例。如果浏览器具有高级功能,则网站可能会呈现“更丰富”的内容 - 更具动态和风格的内容。使用机器人无法帮助查看这些网站。

要解决此问题,您需要遵循以下步骤:

  1. 此处 下载 chrome-driver。选择与您的操作系统匹配的那个。
  2. 提取驱动程序并将其放在某个目录中。例如, \usr
  3. 通过运行 pip install selenium 安装 Selenium ,它是一个 python 模块。 请注意,selenium 依赖于另一个名为 msgpack 的包。因此,您应该先使用此命令 pip install msgpack 安装它。
  4. 现在,我们已准备好运行以下代码
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


def create_browser(webdriver_path):
    #create a selenium object that mimics the browser
    browser_options = Options()
    #headless tag created an invisible browser
    browser_options.add_argument("--headless")
    browser_options.add_argument('--no-sandbox')
    browser = webdriver.Chrome(webdriver_path, chrome_options=browser_options)
    print("Done Creating Browser")
    return browser


url = "https://www.linkedin.com/jobs/view/inside-sales-manager-at-stericycle-1089095836/"
browser = create_browser('/usr/chromedriver') #DON'T FORGET TO CHANGE THIS AS YOUR DIRECTORY
browser.get(url)
page_html = browser.page_source
print(page_html[-10:]) #prints dy></html>

现在,您拥有了整个页面。我希望这能回答您的问题!!

Anwarvic
2019-01-28

由于对 Selenium 进行了几项重大更新(从参数中删除了驱动程序的直接路径,并向服务添加了浏览器路径 - 它通常位于 C:/Program Files (x86)/Google/Chrome/Application/chrome.exe), 上一个答案 可以更新以避免 Selenium 4+ 出现问题:

import requests
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options, Service


def create_browser(webdriver_path, browser_path):

    # Create a Selenium object that mimics the browser and give a link to real browser
    browser_options = Options()
    browser_service = Service(webdriver_path)

    # Headless tag created an invisible browser
    browser_options.add_argument("--headless")
    browser_options.add_argument('--no-sandbox')
    browser_options.binary_location = browser_path

    # Launch browser with the given settings
    browser = webdriver.Chrome(service = browser_service, options = browser_options)
    print("Done Creating Browser")
    return browser


url = "https://www.linkedin.com/jobs/view/inside-sales-manager-at-stericycle-1089095836/"
browser = create_browser('/some_path/chromedriver.exe', '/some_other_path/chrome.exe') 
browser.get(url)
page_html = browser.page_source
print(page_html[-10:]) #prints dy></html>

我建议新读者重新检查 Selenium 文档,因为这个库每 2-3 年就会发生重大变化,这可能导致这里的答案快速过时。

Lebedev Andrey
2023-07-27