Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中

Selenium自动化测试工具,支持多种浏览器,主要用来解决JavaScript渲染的问题

 

需要的工具:Pycharm、python37、Chromedriver环境配置好、Chrome浏览器、Selenium库、MongoDB可视化工具、pymongo库

参考的书籍:python3网络爬虫开发与实战---崔大神

Selenium+Chrome爬取淘宝美食并存入MongoDB数据库中

流程框架:

  1. 搜索关键词:利用Selenium驱动浏览器搜索关键词,得到查询后的商品列表
  2. 分析页码并翻页:得到商品页码数,模拟翻页,得到后续页面的商品列表
  3. 分析提取商品内容:利用PyQuery分析源码,解析得到商品列表
  4. 存储至MongoDB,该商品列表信息存储到数据库MongoDB

源代码在最下方,直接可以运行,不能运行的话,网页就是变化了,自己改一下对应网页变化的地方。

希望看到此文章的,学习到一点也是很好的。

还需要改进的地方:自动输入账号,密码,点击登录。试了一下,自动输入账号和密码时,滑块自动松开了,也会出现失败。然后自己又试手动滑动滑块,也会出现失败。又想到一个方法,点击支付宝登录,输入支付宝账号密码,这种验证码tesserocr库识别准确率也不会太高,可以提交给商家识别,能完成自动化爬取。我是手机扫二维码才进入淘宝页面,所以下面这部分代码我把删除呢。

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第1张图片Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第2张图片

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第3张图片

如果有想用PhantomJS(无界面浏览器)来提高抓取速度,这里行不通,因为需要手机扫码才能登录

正文开始:

1、首先测试一下,selenium库能否驱动Chrome浏览器,弹出浏览器窗口,说明配置正常(在这里最好关闭Chrome自动更新,不然Chromedriver版本会与Chrome版本不匹配)

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第4张图片

 

2、打开Chrome浏览器,搜索Chromedriver,可以看到它的具体详情功能。(VPN推荐:http://coolgay.xyz/  3块钱一个月,挺好用,如果关闭VPN发现百度连不上,需要自己关闭代理,有时候会出现没有自动关闭代理),如果没有下载,可以在上面下载与你谷歌浏览器相对应的版本

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第5张图片

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第6张图片

 

 

3、搜索Python Selenium文档(https://selenium-python-zh.readthedocs.io/en/latest/waits.html),选择第五个,了解显示等待和隐式等待的区别,复制粘贴显示等待的代码

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第7张图片

 

4、打开淘宝页面,点击箭头选择器放在搜索框,可以对应到源代码。右击源代码部分,点击Copy,再选择Copy selector。By后改成CSS_SELECTOR,将双引号里的改成刚才Copy的元素。意思是等待页面加载完成,首先获取页码输入框,赋值为input。

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第8张图片

 

5、上面是输入框,下面就需要提交按钮,与上一步是一样的,右击对应源代码部分,Copy,Copy selector。可以看到文档里有点击按钮的功能element_to_be_clickable,将双引号里面的替换掉按钮的元素。意思是获取“确定”按钮,赋值为submit

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第9张图片

 

6、因为WebDriverWait(browser, 10)后面会经常用到,这里改写一下,意思是等待加载时间,使用WebDriver()对象,可以指定等待条件,同时指定一个最长等待时间,这里设置的是10s。EC也是改写的,不然写expected_conditions太长,意思是如果在这个时间内匹配了等待时间,也就是说页面元素成功加载出来了,即立即返回相应结果并继续向下执行,否则到了最大等待时间还没有加载出来时,就直接抛出超时异常

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第10张图片

 

7、在输入框中输入美食两个字,并且点击搜索按钮提交。可以看文档中有参考。main方法调用search方法,运行该程序,可以看到自动弹出Chrome浏览器。我这边是手机扫码进去的。

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第11张图片

 

8、这一步测试一下翻页的操作,选择器移到蓝色阴影的部分,点击确定,还要比对一下是否已经翻页,还需要与页数高亮的部分进行配对,如果页数与高亮部分一样,说明翻页成功。运行程序可以看到Chrome浏览器一直在进行翻页操作

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第12张图片

 

9、对每一页的宝贝进行解析,打印输出信息。该方法在点击美食页面加载完成调用一次,在点击下一页页面加载完成时,再调用一次。代码省略,下面我会把源代码放在github,并且有详细注解

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第13张图片

 

10、下面是把解析打印出来的数据存储到MongoDB中,save_to_mongo方法放在get_products方法中调用,因为要将数据传入MongoDB中。可以看到打印出来的信息与MongoDB数据库中数据一样

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第14张图片

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第15张图片

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第16张图片

 

详细代码在GitHubhttps://github.com/15160200501/TaoBao/blob/master/TaoBao.py

Selenium+Chrome爬取淘宝美食商品并存入MongoDB数据库中_第17张图片

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