【发布时间】:2020-02-28 12:15:45
【问题描述】:
我正在学习 Python,我的第一个项目是抓取戴尔网页以提取一些数据并将其存储在 Zabbix 中。
基本上,我需要提取我们拥有的一些服务器的保修信息。 这是我到目前为止得到的代码。
import requests
from bs4 import BeautifulSoup
my_url = 'https://www.dell.com/support/home/ca/en/cadhs1/product-support/servicetag/0-NE9lVXI4NlpmbjFtRHJBbTF0dDhoQT090/overview'
# UserAgent
headers = {
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8,pt-BR;q=0.7,pt;q=0.6",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
"X-Amzn-Trace-Id": "Root=1-5e5752df-915a054873c751c475708940"
}
# Opening up connection to site
uClient = requests.get(my_url, headers=headers)
page_soup = BeautifulSoup(uClient.content, 'html.parser')
print(page_soup)
有趣的是,当我检查页面时,我可以看到我想要抓取的数据,但是当我在代码中打印页面时,数据不存在。似乎提取的数据不完整。
这是我想在脚本上看到的数据<p id="warrantyExpiringLabel" class="mb-0">Expires 11 DEC. 2022</p>,但打印时它不存在。
我正在阅读一些在线论坛,说一些数据是通过 javascript 插入的,这就是 Beautifulsoup 库无法提取它的原因。我需要使用其他一些库来收集数据。
我仍在学习 Python 和 Beautifulsoup 库,因此我可能需要有人为我指明正确的方向。
谁能与我分享你的知识,以便我学习这个库?
【问题讨论】:
-
检查我对类似问题的回答:stackoverflow.com/a/56587626/7994074。我希望这会有所帮助
-
您尝试抓取的内容是在浏览器中使用 Javascript 动态呈现的。使用请求,您只能获得没有您提到的段落的原始 HTML。你需要使用像 Selenium 这样的东西。
-
当您想处理基于核心 Javascript 的 Web 应用程序并希望通过 AJAX/PJAX 请求使浏览器自动化时。那么 Selenium 将是一个不错的选择。
-
嘿@petezurich 你能告诉我你是如何知道内容是通过 Javascript 动态传递的,这样我也可以学习并避免将来出现同样的错误吗?
-
在您的浏览器中,您可以比较原始 HTML (
View Page Source) 和呈现的网页内容 (Inspect element)。前者是您可以通过请求获得的,后者是您必须通过 Selenium 获得的。
标签: python beautifulsoup python-requests