为什么在BeautifulSoup解析、网页ctrl+u看到的内容,与网页开发者工具、右键另存为html 看到的内容不一样?

网页上看开发者工具显示:(有价格2599)

img

python代码及控制台输出:

import requests
from bs4 import BeautifulSoup
from fake_user_agent import user_agent

url = "https://item.jd.com/100011688137.html"
headers = {"User-agent": user_agent()}

response = requests.get(url=url, headers=headers)
soup = BeautifulSoup(response.text, "lxml")

print(soup.find_all("span", class_="p-price"))

输出内容为:(无价格2599)

[<span class="p-price">
<span>¥</span>
<span class="price J-p-100011688137"></span>
</span>]

Process finished with exit code 0

网页ctrl+u显示:(无价格2599)

                        <div class="dd">
                            <span class="p-price">
                                <span></span>
                                <span class="price J-p-100011688137"></span>

网页右键另存为html,再用python的open打开,又有2599了。

请问原因是什么?有什么方法或思路可以爬到这个价格么?
谢谢!

价格可能是通过js向后端发请求获得的,直接拿静态网页是拿不到的

  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答: 在网页中,有些内容是动态加载的,而非一开始就加载,而使用BeautifulSoup解析网页时只会解析出初始的静态内容,因此可能无法获取所有内容。而在右键另存为html后再使用Python的open方法打开时,可以获取所有内容是因为在保存时已经将所有内容加载出来了。

    获取这个价格信息的方法或思路是需要观察网页的加载方式,找到包含价格信息的js文件,模拟发送请求并解析响应的内容。可以使用Selenium等工具模拟用户操作,或使用requests等库发送请求获取响应。如果是单个页面,可以使用Chrome开发者工具查看网络请求获取到的数据,进一步分析数据并提取价格信息。如果是多个页面需要批量获取价格信息,可以使用多线程或异步编程以提高效率。同时,还可以使用一些优化技巧如设置请求头、使用代理IP等来避免被封禁。