selenium淘宝爬虫

本文介绍了使用selenium爬取淘宝商品的完整过程,包括模拟登录、商品列表页分析、数据提取、数据库设计以及解决遇到的滑块验证等问题。作者在实践中遇到了验证码拦截和滑块验证的挑战,通过不断尝试和调整,成功实现了爬虫的执行并保存了数据。
摘要由CSDN通过智能技术生成

使用selenium做淘宝商品爬虫

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

1、准备工作

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

2、页面分析

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

3、代码实现

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

3-1、模拟登陆

在学习书中代码时,书中第一步就是直接到商品列表页,但是仙子啊已经行不通了,因为淘宝改成了需要登陆账号才能访问商品列表页,因此需要模拟登陆淘宝。
首先创建account.py文件,保存自己的账号信息。之后就可以编辑登陆函数来实现登陆操作了。但是实际过程并没有这么简单,比如我遇到了以下问题。登陆验证出现滑块验证,并且无论我怎么滑,都无法通过验证。上网查询解决方案,理由是淘宝检测出了我们浏览器是通过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)

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

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

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

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=AutomationControlled")
browser = webdriver.Chrome(options=options)
wait = WebDriverWait(browser, 5)


def login():
    url = 'https://s.taobao.com/search?q=' + quote(KEYWORD)
    browser
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值