MAC下使用selenium躲过亚马逊反爬虫机制
Posted googlingman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的话,很占用项目的空间。
二、安装Selenium
Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作。对于一些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)
运行结果:
核心错误主要停留在上图中最后一句,即网站要求使用授权证书登录。
上面网址替换成其他电商网站地址(例如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
以上是关于MAC下使用selenium躲过亚马逊反爬虫机制的主要内容,如果未能解决你的问题,请参考以下文章
WAX云钱包解决Cloudflare通过SSL指纹识别实现的反爬虫机制
一行js代码识别Selenium+Webdriver及其应对方案
c#爬虫-selenium检测webdriver封爬虫的解决方法