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 就是这种行为的完美示例。如果浏览器具有高级功能,则网站可能会呈现“更丰富”的内容 - 更具动态和风格的内容。使用机器人无法帮助查看这些网站。
要解决此问题,您需要遵循以下步骤:
- 从 此处 下载 chrome-driver。选择与您的操作系统匹配的那个。
-
提取驱动程序并将其放在某个目录中。例如,
\usr
-
通过运行
pip install selenium
安装Selenium
,它是一个 python 模块。 请注意,selenium 依赖于另一个名为msgpack
的包。因此,您应该先使用此命令pip install msgpack
安装它。 - 现在,我们已准备好运行以下代码
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