提兵百万西湖上,立马吴山第一峰!这篇文章主要讲述MAC下使用selenium躲过亚马逊反爬虫机制相关的知识,希望能为你提供帮助。
一、Selenium WebDriver 的工作原理客户端(我们写的Selenium scripts) 发送请求到服务器端(任何浏览器的Http Server), 但是我们的程序不能直接访问浏览器的Http Server,因此浏览器的Driver 就设计出来,作为一个中间媒介连接 Selenium的客户端和服务器。
所以在我们写的程序中,首先应该指定浏览器的Driver 的path.
浏览器的Driver可以是ChormeDriver, FirefoxDriver, 或是其它任何浏览器的Driver。
指定浏览器的Driver
的path有两种方法:
- 设置系统path
- 放到测试项目里
1、设置系统path- 优点: 任何测试项目都可以在这个机器里运行
-缺点:你的测试项目不能在其它机器上运行,因为其它机器上没有设置系统path。
2、放到测试项目里-优点: 你的测试项目可以其它机器上运行
-缺点:每个测试项目都放一个或几个Driver的话,很占用项目的空间。
二、安装SeleniumSelenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些javascript渲染的页面来说,这种抓取的方式非常有效。
安装:命令行中输入安装命令:
pip3 install selenium
三、安装ChromeDriver前面我们安装好了selenium库,但是它是一个自动化测试工具,需要浏览器配合使用,这里我们选择Chrome浏览器。
注意:这一步下载,不是随便下载一个版本的chromedriver,而是要与你机器上安装的Chrome浏览器版本相匹配才行。可以打开浏览器的‘关于’对话框找到浏览器版本,然后再到chromedriver下载地址找相匹配的chromedriver下载。
对应的下载地址是:
??http://chromedriver.storage.googleapis.com/index.html??
细节不再介绍。
下载后得到chromedriver_mac64.zip(根据你的机器而定),解压后得到一个可执行文件chromedriver。
然后,运行下面命令:
sudo cp ./chromedriver /usr/local/bin
为的是在后面代码运行中,能够自动找到对应的上述驱动程序。
四、使用selenium爬取亚马逊网站数据
为了证实selenium的优势,我们不妨先使用urllib模块与requests模块进行操作,参考下面关键代码:
(一)使用urllib模块
import urllib.request
req = urllib.request.urlopen(\'https://www.amazon.com\')
print(req.code)
运行结果:
【MAC下使用selenium躲过亚马逊反爬虫机制】
文章图片
核心错误主要停留在上图中最后一句,即网站要求使用授权证书登录。
上面网址替换成其他电商网站地址(例如https://www.jd.com或者https://www.baidu.com或者https://www.taobao.com),出现同样错误。
(二)使用requests模块
import requests
url=\'https://www.amazon.com\'
if __name__==\'__main__\':
r = requests.get(url)
print(r.status_code)
运行结果:
文章图片
503是一种HTTP状态码。英文名503 Service Unavailable。与404(404 Not Found)是同属一种网页状态出错码。前者是服务器不可访问时给客户端的一种状态,后者是访问了服务器不存在的资源。
(三)使用selenium方案?
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# selenium配置参数
options = Options()
# 配置无头参数,即不打开浏览器
options.add_argument(\'--headless\')
browser = webdriver.Chrome()
if __name__==\'__main__\':
url = "https://www.amazon.com"
print(url)
# 通过selenium来访问亚马逊
browser.get(url)
# 将爬取到的网页信息,写入到本地文件
fw = open(\'./db/amzon.html\', \'w\', encoding=\'utf-8\')
fw.write(str(browser.page_source))
browser.close()
fw.close()
运行结果中,会观察到Chrome浏览器短暂的打开与目标网页显示,然后自动关闭,最后,在本地目标位置(db子目录)下,得到网页文件amzon.html。使用浏览器打开观察,如下图所示,成功!(因上传图片有尺寸限制,所以显示了部分内容)
文章图片
?
引用mac selenium 各种版本chromedriver下载:??https://blog.csdn.net/demon119/article/details/107041096/??。
??http://chromedriver.storage.googleapis.com/index.html??
推荐阅读
- linux 性能优化大纲
- Linux Docker 运维相关命令
- 从vCenter Server中删除不再使用的replica-虚拟机
- 测试一下
- 803_AUTOSAR_TR_GeneralBlueprintsSupplement1_概述以及可视化表达1
- Oracle数据库基本操作第一章
- 国庆高质量出行,可视化开启智慧旅游
- Prometheus监控运维实战十一(Pushgateway)
- word文档如何插入公式编号并对齐