一、前言

1、splinter 是类似 selenium 的 一个web自动化测试的工具,
在这程序里用来驱动浏览器打开淘宝网、搜索mi10、登录
淘宝、进入小米官方旗舰店、获取小米10评论、翻页等功能。
2、pyautogui 可以驱动键盘和鼠标,这里用来处理滑块验证。
3、如果你觉得这篇博客对你有帮助,请点个赞或者评论“666”,
若感谢作者,可以打赏。谢谢。
4、先看下这个程序爬取的结果吧:

二、编程过程

1、访问淘宝网及登录

1.1先引入splinter

from splinter.browser import Browser

1.2设置 url ,还有 本地的user- agent。我用firefox浏览器,已装浏览器驱动

url = "https://www.taobao.com"
browser = Browser("firefox",user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0")

1.3开始访问淘宝网

browser.visit(url)

1.4弹出淘宝网。在搜索框中填入 mi10。用find_by_id()方法捕获搜索框,搜索框的 id 是 q ,这里写法与 selenium不同(#q)。fill(‘mi10’)填写 ‘mi10’。然后点击搜索 。

browser.find_by_id('q').first.fill('mi10')
browser.find_by_css('.btn-search').click()


1.5上一步导致弹出登录页面,在登录页面输入账号、密码,点击登录
loginID是你的账号,password是密码。

browser.find_by_id('fm-login-id').first.fill('loginID')
browser.find_by_id('fm-login-password').first.fill('password')
browser.find_by_css('.fm-button').click()

1.6 这里点击、进入小米官方旗舰店。上一步会弹出小米官方旗舰店小米10的售卖窗口。

#点击小米官方旗舰店
browser.find_by_css('#J_Itemlist_Pic_611224893062').click()
#上一步会弹出小米官方旗舰店小米10的售卖窗口,如果弹出的是标签页,则不用
#指定到弹出的窗口,后面操作
window = browser.windows[1]
window.is_current = True


1.7以上部分的代码如下:

from splinter.browser import Browser
#获取评论前的操作
def ready_option(url):#开始访问browser.visit(url)#输入mi10,点击搜索。browser.find_by_id('q').first.fill('mi10')browser.find_by_css('.btn-search').click()#输入账号、密码,点击登录browser.find_by_id('fm-login-id').first.fill('loginID')browser.find_by_id('fm-login-password').first.fill('password')browser.find_by_css('.fm-button').click()#点击小米官方旗舰店browser.find_by_css('#J_Itemlist_Pic_611224893062').click()#上一步会弹出小米官方旗舰店小米10的售卖窗口#指定到弹出的窗口window = browser.windows[1]window.is_current = True

2、点击评价及滑块验证

2.1点击累计评价后面的数字

browser.find_by_css('#J_ItemRates > div:nth-child(1) > span:nth-child(2)').click()

2.2这一步可能会弹出 滑块验证,所以用pyautogui 驱动鼠标滑动完成验证。
滑块验证的小窗口位置是固定的,但有时候滑块验证右边 也有滑块需要下拉。所以用pyautogui 驱动鼠标 按路径1、2拖放。

2.3滑块验证的代码如下。先移到位置1起点(moveTo,duration是持续时间或速度),再拖放到1终点(drag),再按路径2拖放,拖放不要太快。

#滑块验证处理
def dispose_slider():time.sleep(0.2)pyautogui.moveTo(x=1080, y=503, duration=0.25)pyautogui.dragTo(x=1080, y=560, duration=0.5)time.sleep(0.2)pyautogui.moveTo(x=660, y=677, duration=0.25)pyautogui.dragTo(x=1300, y=677, duration=0.8)#休息0.25秒,表示对淘宝的尊敬time.sleep(0.25)

2.4 所以点击评价的代码如下。
需要引入相关库。

import pyautogui
import time
from splinter.exceptions import ElementDoesNotExist
#点击评价
def click_comment():#不管有没有滑块验证,先划两下dispose_slider()dispose_slider()time.sleep(0.2)# 点击评价try:browser.find_by_css('#J_ItemRates > div:nth-child(1) > span:nth-child(2)').click()#防止刷新过快,捕获不到 评价 元素except ElementDoesNotExist:#有时候滑块验证在拖放滑块后,还需要刷新,按F5pyautogui.hotkey('f5')browser.find_by_css('#J_ItemRates > div:nth-child(1) > span:nth-child(2)').click()

3、获取用户评论及配置,然后保存

3.1获取评论。1页20个评论都是在tr标签下,有20个tr标签。所以先获取这20个tr标签。

# 获取的评论comment是一个列表(List)
comment = browser.find_by_css('.rate-grid').find_by_tag('tr')


然后遍历获取每个评论及手机配置:

from selenium.common import exceptions as ex
#获取当前页面的评论
def get_comment():try:# 获取的comment是一个列表(List)comment = browser.find_by_css('.rate-grid').find_by_tag('tr')#遍历,获取每个评论及手机配置for item in comment:'''#直接printprint('评论:' + i.find_by_css('.rate-grid .tm-rate-content').text)print('配置:'+ i.find_by_css('.rate-sku').text + '\n')'''#以字典的形式保存到mongoDB#评论用父标签.tm-rate-content,如果当前标签 tm-rate-fulltxt会捕获到别的字符result = {'评论': item.find_by_css('.tm-rate-content').text,'配置': item.find_by_css('.rate-sku').text}#存到mongoDBsave_to_mongo(result)#可能出现滑块验证,导致捕获不到相关元素,从而出错except ElementDoesNotExist or ex.StaleElementReferenceException :dispose_slider()

3.2保存到mongoDB

#以字典的形式保存到mongoDB
def save_to_mongo(result):client = pymongo.MongoClient('localhost')# 指定数据库db = client['taobao']try:if db['product'].insert_one(result):print('存储到MONGODB成功')except Exception:print('存储到MONGODB失败',result)

4、翻页

4.1分析。下一页的CSS选择器:第1页是.rate-paginator > a:nth-child(6),
第2页、第5页分别是.rate-paginator > a:nth-child(7),.rate-paginator > a:nth-child(10)。第6页及后面的页:.rate-paginator > a:nth-child(11)

4.2翻页代码如下:
x是页数,初值是6

#翻页,点击下一页
def next_page(x,i):try:# 第一页的CSS child(6),第二页的CSS child(7),第六页及以后的CSS 都是child(11),第六页的x是11if x<11 :browser.find_by_css('.rate-paginator > a:nth-child({})'.format(x)).click()else :browser.find_by_css('.rate-paginator > a:nth-child(11)').click()# 可能出现滑块验证except ElementDoesNotExist:#只刷新和点击一次if i<2:dispose_slider()pyautogui.hotkey('f5')time.sleep(0.25)click_comment()time.sleep(0.25)

5、main()函数

def main():ready_option(url)time.sleep(0.5)#点击评论click_comment()#爬取n页评论for i in range(1,10):print("第{}页".format(i))get_comment()x = i+5time.sleep(0.2)next_page(x,i)# 休息0.4秒,表示对淘宝的尊敬time.sleep(0.4)#最后退出浏览器#browser.quit()

三、完整代码及运行视频链接

1、完整代码

1.1 运行的代码约80行。

from splinter.browser import Browser
import pymongo
import pyautogui
import time
from splinter.exceptions import ElementDoesNotExist
from selenium.common import exceptions as exurl = "https://www.taobao.com"
browser = Browser("firefox",user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0")#获取评论前的操作
def ready_option(url):#开始访问browser.visit(url)#输入mi10,点击搜索。browser.find_by_id('q').first.fill('mi10')browser.find_by_css('.btn-search').click()#输入账号、密码,点击登录browser.find_by_id('fm-login-id').first.fill('loginID')browser.find_by_id('fm-login-password').first.fill('password')browser.find_by_css('.fm-button').click()#点击小米官方旗舰店browser.find_by_css('#J_Itemlist_Pic_611224893062').click()#上一步会弹出小米官方旗舰店小米10的售卖窗口#指定到弹出的窗口window = browser.windows[1]window.is_current = True#点击评价
def click_comment():#不管有没有滑块验证,先划两下dispose_slider()dispose_slider()time.sleep(0.2)# 点击评价try:browser.find_by_css('#J_ItemRates > div:nth-child(1) > span:nth-child(2)').click()#防止刷新过快,捕获不到 评价 元素except ElementDoesNotExist:#有时候滑块验证在拖放滑块后,还需要刷新(按F5)pyautogui.hotkey('f5')browser.find_by_css('#J_ItemRates > div:nth-child(1) > span:nth-child(2)').click()#获取当前页面的评论
def get_comment():try:# 获取的comment是一个列表(List)comment = browser.find_by_css('.rate-grid').find_by_tag('tr')#遍历,获取每个评论及手机配置for item in comment:'''#直接printprint('评论:' + i.find_by_css('.rate-grid .tm-rate-content').text)print('配置:'+ i.find_by_css('.rate-sku').text + '\n')'''#以字典的形式保存到mongoDB#评论用父标签.tm-rate-content,如果当前标签 tm-rate-fulltxt会捕获到别的字符result = {'评论': item.find_by_css('.tm-rate-content').text,'配置': item.find_by_css('.rate-sku').text}# 存到mongoDBsave_to_mongo(result)#可能出现滑块验证except ElementDoesNotExist or ex.StaleElementReferenceException :dispose_slider()#翻页,点击下一页
def next_page(x,i):try:# 第一页的CSS child(6),第二页的CSS child(7),第六页及以后的CSS 都是child(11),第六页的x是11if x<11 :browser.find_by_css('.rate-paginator > a:nth-child({})'.format(x)).click()else :browser.find_by_css('.rate-paginator > a:nth-child(11)').click()# 可能出现滑块验证except ElementDoesNotExist:#只刷新和点击一次if i<2:dispose_slider()pyautogui.hotkey('f5')time.sleep(0.25)click_comment()time.sleep(0.25)#以字典的形式保存到mongoDB
def save_to_mongo(result):client = pymongo.MongoClient('localhost')# 指定数据库db = client['taobao']try:if db['product'].insert_one(result):print('存储到MONGODB成功')except Exception:print('存储到MONGODB失败',result)#滑块验证处理
def dispose_slider():time.sleep(0.2)pyautogui.moveTo(x=1080, y=503, duration=0.25)pyautogui.dragTo(x=1080, y=560, duration=0.5)time.sleep(0.2)pyautogui.moveTo(x=660, y=677, duration=0.25)pyautogui.dragTo(x=1300, y=677, duration=0.8)#休息0.25秒,表示对淘宝的尊敬time.sleep(0.25)def main():ready_option(url)time.sleep(0.5)click_comment()#爬取n页评论for i in range(1,10):print("第{}页".format(i))get_comment()x = i+5time.sleep(0.2)next_page(x,i)# 休息0.4秒,表示对淘宝的尊敬time.sleep(0.4)#最后退出浏览器#browser.quit()if __name__ == '__main__':main()

2、程序运行视频链接

链接:https://pan.baidu.com/s/1Zx-ZY-7jyWwAIPu6eENKzg
提取码:7gf9

Splinter+pyautogui爬取淘宝小米10评论相关推荐

  1. python爬虫淘宝评论_Python爬取淘宝店铺和评论

    1 安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...

  2. python开发跟淘宝有联系没_Python爬取淘宝店铺和评论

    1.安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动s ...

  3. python爬淘宝店铺_【Python爬虫案例学习】Python爬取淘宝店铺和评论

    安装开发需要的一些库 (1) 安装mysql 的驱动:在Windows上按win+r输入cmd打开命令行,输入命令pip install pymysql,回车即可. (2) 安装自动化测试的驱动sel ...

  4. requests+cookie爬取淘宝任意商品评论。超详细教程!

    首先使用的工具:python3.7,火狐浏览器 思路分析:现在网页版淘宝搜索商品之后,点进去,基本上都会弹出登录框,当我们直接把一个商品的链接去爬取的时候,返回的会是登陆页面的Html,所以我们第一步 ...

  5. 爬取淘宝商品详情评论,最新版

    第一步 抓包 打开你想要爬取的商品详情页,这里我是输入手机然后随便点开的一个页面.(这里建议用谷歌浏览器,懂的人都懂不必多说) 然后右键点击检查,选择network,找到保存评论的url.在这里提供一 ...

  6. selenium爬取淘宝商品基础数据以及商品详情(茶叶数据)

    selenium爬取淘宝商品基础数据以及商品详情 目录 网页分析 确定要爬取的数据 分析网页构成 爬取流程 登入 爬取基础数据以及商品详情 爬取基础数据 爬取商品详情 淘宝滑动验证码 保存EXCEL中 ...

  7. 爬取淘宝某店铺所有商品基本信息

    目的:爬取淘宝某店铺所有商品基本信息 这里是爬取的淘宝小米官方店铺的所有商品基本信息,其他店铺也是同样的操作 调用模块 import re import requests import time im ...

  8. python爬虫学习(三):使用re库爬取淘宝商品,并把结果写进txt文件

    第二个例子是使用requests库+re库爬取淘宝搜索商品页面的商品信息 (1)分析网页源码 打开淘宝,输入关键字"python",然后搜索,显示如下搜索结果 从url连接中可以得 ...

  9. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品

    在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...

最新文章

  1. AttributeError: module ‘sys‘ has no attribute ‘maxint‘
  2. 下如何画出频率瀑布图_用maftools一行代码画出瀑布图
  3. HDU - 7009 树上游走(树的直径+容斥)
  4. jep使用_JEP 277“增强弃用”非常好。 但这是一个更好的选择
  5. 网易严选Java开发三面面经:java读文件内容
  6. R语言学习笔记(4)
  7. ELK 分析 nginx access 日志
  8. Jenkins远程命令执行漏洞(CVE-2018-1000861复现)
  9. .NET学习知识和技术总结
  10. mysql查看编码_mysql 字符编码的查看与修改
  11. wpf之auto与*的区别
  12. 我的微博,三层嵌套,
  13. 从程序员到项目经理(9):程序员加油站 -- 再牛也要合群
  14. Reflex WMS入门系列二十四:拆托(HD Breakdown)
  15. 岁月温柔-4 最美人间四月天
  16. 六张思维导图,读懂项目管理
  17. C#调用obs studio 二次开发 源码分析 编译
  18. 6-6 采用邻接表创建无向图
  19. 均匀布拉格光栅MATLAB反射谱仿真
  20. 离散数学序关系求解最大/小元,极大/小元,上/下届,上/下确界

热门文章

  1. 服务器c盘有个inetpub文件夹,老司机为你示范win10系统C盘inetpub文件夹删不掉的图文教程...
  2. 使用Keras和DDPG玩赛车游戏(自动驾驶)
  3. 慎入!超详细240页PPT!史上最强大的计算机网络导论!
  4. 鼠标乱动原来是这个问题啊=.=
  5. H.迷宫,(算法选修)
  6. 数方大数据抓取网站访问用户,精准度百分之九十以上。
  7. python求最大公约数
  8. 谷露Gllue联合领英LinkedIn,发布猎头行业中高端招聘大数据观察
  9. 从教女友写代码中学到的,教人写代码在一定程度上是硬件问题
  10. 【FAQ】软件保护系统Themida常见问题集锦(一)—Themida和WinLicense有什么区别?...