Python Web抓取:请求内容中缺少标记

Python Web抓取:请求内容中缺少标记,python,beautifulsoup,python-requests,Python,Beautifulsoup,Python Requests,我正在学习Python,我的第一个项目之一是抓取一个Dell网页,提取一些数据存储在Zabbix中 基本上,我需要提取一些服务器的保修信息。 这是我到目前为止得到的密码 import requests from bs4 import BeautifulSoup my_url = 'https://www.dell.com/support/home/ca/en/cadhs1/product-support/servicetag/0-NE9lVXI4NlpmbjFtRHJBbTF0dDhoQT09

我正在学习Python,我的第一个项目之一是抓取一个Dell网页,提取一些数据存储在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)
有趣的是,当我检查页面时,我可以看到我想要刮取的数据,但是当我在代码中打印页面时,数据不在那里。似乎提取的数据不完整

这是我希望在脚本中看到的数据,但打印时不在那里

我在一些在线论坛上读到,一些数据是通过javascript插入的,这就是为什么Beautifulsoup库无法提取它的原因。我需要使用其他库来收集数据

我还在学习Python和Beautifulsoup lib,所以我可能需要有人给我指出正确的方向

有谁能和我分享你的知识,让我学习这个库吗

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from bs4 import BeautifulSoup
import time

options = Options()
options.add_argument('--headless')
driver = webdriver.Firefox(options=options)
driver.get("https://www.dell.com/support/home/ca/en/cadhs1/product-support/servicetag/0-NE9lVXI4NlpmbjFtRHJBbTF0dDhoQT090/overview")

time.sleep(1)
soup = BeautifulSoup(driver.page_source, 'html.parser')

for item in soup.findAll("p", id="warrantyExpiringLabel"):
    print(item.text)

driver.quit()
输出:

Expires  20 JUL 2023

检查我对类似问题的回答:。我希望这有助于您在浏览器中使用Javascript动态呈现您试图获取的内容。对于请求,您只获得原始HTML,而没有您提到的段落。当您想要处理基于Javascript的核心web应用程序,并且想要使用AJAX/PJAX请求实现浏览器自动化时,您需要使用Selenium。那么Selenium将是一个不错的选择。嘿@petezurich,你能教我如何知道内容是通过Javascript动态传递的,这样我也可以学习并避免将来犯同样的错误吗?在浏览器中,你可以比较原始HTML(
查看页面源代码
)和呈现的网页内容(
检查元素
)。前者是您可以通过请求获得的,后者是您必须通过Selenium.OMG获得的!非常感谢您修复了我的代码。我头痛了整整一个星期。您甚至包括了“headless”选项,以便在代码运行时不会打开web浏览器。这太完美了。我想我的错误是试图只用BeautifulSoup来实现这一点,而我应该用selenium来实现这一点。你是一个传奇!