python - Beatifulsoup 没有返回页面的完整 html
问题描述
我想从亚马逊网站上抓取一些页面,比如标题、url、aisn,我遇到了一个问题,脚本只解析 15 个产品,而页面上显示 50 个。我决定将所有 html 打印到控制台,我看到html 以 15 个产品结束,脚本没有任何错误。这是我脚本的一部分
keyword = "men jeans".replace(' ', '+')
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1b3) Gecko/20090305 Firefox/3.1b3 GTB5'}
url = "https://www.amazon.com/s/field-keywords={}".format(keyword)
request = requests.session()
req = request.get(url, headers = headers)
sleep(3)
soup = BeautifulSoup(req.content, 'html.parser')
print(soup)
解决方案
这是因为很少有项目是动态生成的。除了使用硒之外,可能还有更好的解决方案。但是,作为一种解决方法,您可以尝试以下方法。
from selenium import webdriver
from bs4 import BeautifulSoup
def fetch_item(driver,keyword):
driver.get(url.format(keyword.replace(" ", "+")))
soup = BeautifulSoup(driver.page_source, 'html.parser')
for items in soup.select("[id^='result_']"):
try:
name = items.select_one("h2").text
except AttributeError: name = ""
print(name)
if __name__ == '__main__':
url = "https://www.amazon.com/s/field-keywords={}"
driver = webdriver.Chrome()
try:
fetch_item(driver,"men jeans")
finally:
driver.quit()
运行上述脚本后,您应该得到 56 个名称或其他结果。
推荐阅读
- json - Laravel 循环遍历嵌套数组
- sql - 触发函数更新所有行而不是一个
- android - 如何在 Android 中创建 Circular SeekBar 以计算周期?
- node.js - create-react-app 不包括 src 和 public 文件夹
- reactjs - useEffect 依赖中 register 和 setRegister 的区别
- php - 从支付提供商 codeigniter 重定向后会话丢失
- c - C HTTP 客户端接收 .PNG 文件
- google-cloud-cdn - 内部(内网)网站的云 CDN
- reactjs - React Follow 功能在页面加载时激活
- javascript - 无法读取待办事项列表的 null 属性“addEventListener”