selenium淘宝爬虫

selenium淘宝爬虫

  • 使用selenium做淘宝商品爬虫
    • 1、准备工作
    • 2、页面分析
    • 3、代码实现
      • 3-1、模拟登陆
      • 3-2、商品列表页
      • 3-3、获取商品信息
      • 3-4、数据库设计
      • 3-5、爬虫执行
      • 3-6、爬虫执行结果
    • 4、待解决的问题
    • 5、总结

使用selenium做淘宝商品爬虫

最近在学习崔庆才老师的《Python3网络爬虫开发实战》,第七章《动态渲染页面爬取》的使用selenium爬取淘宝商品,由于该书出版时间已久,淘宝的反爬机制做了其他改动,书中代码需要改进,特发此文,记录自己学习过程中遇到的问题及解决方法。

1、准备工作

确认已经安装chrome浏览器,并配置好对应版本的ChromeDriver,另外还需要正确安装selenium。
ChromeDriver各版本可在 ChromeDriver各版本下载 中查找并下载。下载完解压到你Anaconda安装目录下的Scripts目录即可。

2、页面分析

打开 淘宝主页 在搜索框键入你想要搜索的商品,进入商品列表页。比如搜“辣条”,得到以下页面:
selenium淘宝爬虫_第1张图片
每个商品包含该商品的基本信息,比如价格、图片、名称、店铺信息等,我们的目的就是将它们爬取下来。
拉到页面底部,会出现如下分页导航,我们爬取多页商品时,翻页需要用到它。
分页导航

3、代码实现

这部分是整个项目的代码实现阶段。

3-1、模拟登陆

在学习书中代码时,书中第一步就是直接到商品列表页,但是仙子啊已经行不通了,因为淘宝改成了需要登陆账号才能访问商品列表页,因此需要模拟登陆淘宝。
首先创建account.py文件,保存自己的账号信息。之后就可以编辑登陆函数来实现登陆操作了。但是实际过程并没有这么简单,比如我遇到了以下问题。selenium淘宝爬虫_第2张图片出现滑块验证,并且无论我怎么滑,都无法通过验证。上网查询解决方案,理由是淘宝检测出了我们浏览器是通过selenium打开的,因此无法访问。selenium打开的浏览器有一个特征,就是window.navigator.webdriver的值为true,而正常打开的浏览器,该值是undifine。修改webdriver为undifine试试。
根据 Chrome 79以后版本Selenium中window.navigator.webdriver 值无法更改的解决方法 我们插入以下代码:

options = ChromeOptions()
# 开启实验性功能
options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
browser = webdriver.Chrome(options=options)
script = '''
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
'''
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
   "source": script})
wait = WebDriverWait(browser, 5)

试试运行结果:
selenium淘宝爬虫_第3张图片遗憾失败,结果与未插入一样。可能是chrome版本升级带来的问题,试试查找chrome88.0的解决方法。
在 chrome88.0版本修改selenium的window.navigator.webdriver 文章中找到可行的解决方法。插入以下代码:

options.add_argument("--disable-blink-features=AutomationControlled")

运行试试结果:
selenium淘宝爬虫_第4张图片
达到目的。但是下一步也存在问题,登陆完,有个验证码拦截页面。离谱,第一天运行还没有呢,第二天就出现了。selenium淘宝爬虫_第5张图片不过这个拦截比较简单,手动验证即可,验证完直接到达商品列表页。
本节代码如下:

KEYWORD = '辣条'
USER = account.USER
PASSWORD = account.PASSWORD

options = ChromeOptions()
# 开启实验性功能
options.add_argument('--start-maximized')  # 最大化运行(全屏窗口),不设置,取元素会报错
options.add_experimental_option('excludeSwitches', ['enable-automation'])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument("--disable-blink-features=Automat

你可能感兴趣的:(python,mysql,selenium,爬虫)