python - python请求和beautifulsoup bot检测
问题描述
我正在尝试使用 requests & beautifulsoup 抓取页面的所有 HTML 元素。我正在使用 ASIN(亚马逊标准识别号)来获取页面的产品详细信息。我的代码如下:
from urllib.request import urlopen
import requests
from bs4 import BeautifulSoup
url = "http://www.amazon.com/dp/" + 'B004CNH98C'
response = urlopen(url)
soup = BeautifulSoup(response, "html.parser")
print(soup)
但是输出没有显示页面的整个 HTML,所以我不能对产品详细信息做进一步的工作。对此有什么帮助吗?
编辑1:
从给定的答案中,它显示了机器人检测页面的标记。我研究了一下,发现了两种破坏它的方法:
- 我可能需要在请求中添加一个标头,但我不明白标头的值应该是什么。
- 使用硒。现在我的问题是,这两种方式都提供平等的支持吗?
解决方案
最好在这里使用 fake_useragent 来简化操作。随机用户代理通过真实世界的浏览器使用统计数据发送请求。如果您不需要动态内容,您最好只通过 HTTP 请求页面内容并以编程方式对其进行解析。
import requests
from fake_useragent import UserAgent
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
ua=UserAgent()
hdr = {'User-Agent': ua.random,
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive'}
url = "http://www.amazon.com/dp/" + 'B004CNH98C'
response = requests.get(url, headers=hdr)
print response.content
Selenium 用于浏览器自动化和动态内容的高级网页抓取。
推荐阅读
- c# - 打破1方法创造2
- laravel - 将自定义项添加到 eloquent 集合
- mysql - 排序规则的非法混合 - MariaDB 10.4 - LUA
- arrays - 通过 ref 传递数组会导致编译器警告 - 如何在此处正确使用指针算术?
- excel - 如何在excel中减去这个时间
- php - 在 PHP 中调整和保存 jpg、png 和 gif
- javascript - 我想从 firbase 实时数据库中导出 PDF 文件中的数据。我在按钮单击时得到空白的 pdf 文件
- javascript - 如何使用 asp.net 核心从一个视图通过另一个视图获取内容?
- .net - 从其他 winForm 调用用户控件的方法
- chatbot - Messenger - 聊天机器人,无需为每个页面创建 FB 应用程序