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封爬虫的解决方法

一日一技:如何正确移除Selenium中window.navigator.webdriver的值

解决selenium驱动被识别反爬,让爬虫顺利跑起来

反爬虫和抗DDOS攻击技术实践