网页上看开发者工具显示:(有价格2599)
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向后端发请求获得的,直接拿静态网页是拿不到的
问题解答: 在网页中,有些内容是动态加载的,而非一开始就加载,而使用BeautifulSoup解析网页时只会解析出初始的静态内容,因此可能无法获取所有内容。而在右键另存为html后再使用Python的open方法打开时,可以获取所有内容是因为在保存时已经将所有内容加载出来了。
获取这个价格信息的方法或思路是需要观察网页的加载方式,找到包含价格信息的js文件,模拟发送请求并解析响应的内容。可以使用Selenium等工具模拟用户操作,或使用requests等库发送请求获取响应。如果是单个页面,可以使用Chrome开发者工具查看网络请求获取到的数据,进一步分析数据并提取价格信息。如果是多个页面需要批量获取价格信息,可以使用多线程或异步编程以提高效率。同时,还可以使用一些优化技巧如设置请求头、使用代理IP等来避免被封禁。