注:如果侵犯了Alibaba的权益,请联系我删除。
上一篇博客已经完成了模拟淘宝登陆,本节主要记录如何爬取淘宝商品列表页数据,同时如何模拟人的操作完成滑块的验证。

代码如下:

#encoding=utf-8
#上面这句话看起来是注释,但其实是有用的,指明了这个脚本的字符集编码格式
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import time
from pyquery import PyQuery as pq
from selenium.webdriver import ActionChainsclass taobao_clawer:
def __init__(self,url):#self.url = urlself.options = webdriver.ChromeOptions()# 不加载图片,加快访问速度self.options.add_experimental_option("prefs", {"profile.mamaged_default_content_settings.images": 2})# 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumself.options.add_experimental_option('excludeSwitches', ['enable-automation'])#self.options.add_argument('--proxy-server=127.0.0.1')self.browser = webdriver.Chrome(executable_path='F:\\Software\\anaconda\\chromedriver', options=self.options)self.wait = WebDriverWait(self.browser, 20)self.browser.get(url)def login(self):# 等待 密码登录选项 出现password_login = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.qrcode-login > .login-links > .forget-pwd')))password_login.click()# 等待 微博登录选项 出现weibo_login = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.weibo-login')))weibo_login.click()#获取账号输入框EMAIL = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#pl_login_logged > div > div:nth-child(2) > div >input' )))EMAIL.send_keys('这里是你的微博账号')#获取密码输入框PASSWD = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#pl_login_logged > div > div:nth-child(3) > div > input')))PASSWD.send_keys('这里是你的微博密码')time.sleep(2)#获取登陆按钮button = self.wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#pl_login_logged > div > div:nth-child(7) > div:nth-child(1) > a > span')))button.click()'''taobao_name = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.site-nav-bd > ul.site-nav-bd-l > li#J_SiteNavLogin > div.site-nav-menu-hd > div.site-nav-user > a.site-nav-login-info-nick ')))# 输出淘宝昵称print(taobao_name.text)'''#搜索商品
def searchinfo(self,good_name):#获取查询输入框search_value = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.search-wrap > div > div:nth-child(2) > #J_TSearchForm > div:nth-child(2) > div:nth-child(3) > div > input')))search_value.send_keys(str(good_name))#获取查询按钮search_button = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'.search-wrap > .search-bd > .search-panel > #J_TSearchForm > .search-button > .btn-search')))search_button.click()#模拟向下滑动浏览
def swipe_down(self,second):for i in range(int(second/0.1)):js = "var q = document.documentElement.scrollTop=" + str(300+200*i)self.browser.execute_script(js)time.sleep(0.1)#js = "var q = document.documentElement.scrollTop = 100000"#self.browser.execute_script(js)time.sleep(0.2)#模拟翻页操作
def next_page(self, page_number):#获取下一页按钮next_button = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > .m-page > .wraper > .clearfix > .form > .btn')))#获取页码输入框next_input = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > .m-page > .wraper > .clearfix > .form > input')))#将当前输入框中的内容清空,并重置为page_numbernext_input.clear()next_input.send_keys(page_number)#睡眠2Stime.sleep(2)next_button.click()#得到所有的页数
def get_total_page(self):#先等待所有的商品都加载完goods_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-itemlist > .m-itemlist > .g-clearfix > .items')))#获得页数并格式化page_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#mainsrp-pager > .m-page > .wraper > .clearfix > .total')))result = page_total.text.strip("共 ").replace(' 页,','')return result#得到商品集
def get_infos(self):list_info = []total_page = self.get_total_page()for i in range(1,int(total_page)):#等待页面商品数据加载完成goods_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > .m-itemlist > .g-clearfix > .items')))#获取本页面源代码html = self.browser.page_source#pq模块解析网页源代码doc = pq(html)#取出淘宝商品数据good_items = doc('.m-itemlist .grid .items .item').items()#遍历该页所有的商品for item in good_items:good_title = item.find('.title').text().replace('\n', "").replace('\r', "")good_price = item.find('.price').text().replace('\n','').replace('\r','')good_sales_num = item.find('.deal-cnt').text()good_shop = item.find('.shop').text()#print(str(good_title) + str(good_price) + str(good_sales_num) + str(good_shop))list_info.append([good_title,good_price,good_sales_num,good_shop])# 模拟向下滑动self.swipe_down(2)#下一页self.next_page(i+1)time.sleep(2)#等待滑块验证码出现,超时时间为5s,每0.5s检查一下#检测是否出现滑块验证,若出现则解决#等待滑块加载完成#WebDriverWait(self.browser, 5 ,0.5,ignored_exceptions=TimeoutError).until(EC.presence_of_element_located((By.CSS_SELECTOR,'.nc_iconfont')))try:#打印源码发现滑块源码并没有出现在当前源码中print(pq(self.browser.page_source))#尝试着切换一下frame到iframe,看一看能不能获得滑块源码self.browser.switch_to.frame(self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_sufei > iframe'))))swipe_button = self.browser.find_element_by_id('nc_1_n1z')print(swipe_button)action = ActionChains(self.browser)action.click_and_hold(swipe_button)#perform用来执行ActionChains中存储的行为action.move_by_offset(580,0).perform()#移动滑块#action.drag_and_drop_by_offset(swipe_button, 400, 0).perform()action.reset_actions()except Exception :print('get swipe_button failed', Exception)return list_info#将结果写入文件中
def write_to_csv(self,list_info):fw = open('result.csv','w',encoding='utf-8')for item in list_info:fw.write(','.join(item)+'\n')if __name__ == "__main__":url = 'https://login.taobao.com/member/login.jhtml'
a = taobao_clawer(url)
a.login()
a.searchinfo('Python')
list_info =a.get_infos()
a.write_to_csv(list_info)

Python+Selenium模拟淘宝滑块并爬取商品数据相关推荐

  1. 自学爬虫项目(二)一一利用selenium模拟淘宝登录,爬取商品数据

    文章目录 前言 一.明确目标 二.分析过程 三.代码封装 总结 前言 你是否还在为学习Python没有方向而苦恼?快来跟着壹乐一起学习吧!让我们共同进步! 今天我们用selenium与Beautifu ...

  2. Python selenium模拟淘宝登陆

    通过selenium定位到各个元素,通过相关操作(如输入框的输入,按钮的点击等)来模拟人的真实操作流程 流程是通过绕个圈子,用微博账号登陆来绕过淘宝登陆,不过事先需要将微博账号与淘宝账号进行绑定 下面 ...

  3. python+selenium实现淘宝双十一自动下单

    python+selenium实现淘宝双十一自动下单 思路/工具参考我的另一篇文章python+selenium实现京东秒杀脚本 1. 扫码登录版 # !/usr/bin/env python # 2 ...

  4. python爬虫学习笔记(三)——淘宝商品比价实战(爬取成功)

    2020年最新淘宝商品比价定向爬取 功能描述 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格. 理解:淘宝的搜索接口 翻页的处理 技术路线:requests­          re 程序的结 ...

  5. python爬虫多久能学会-不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据...

    原标题:不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据 Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方 ...

  6. python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  7. python模拟淘宝登陆_【Python】selenium模拟淘宝登录

    # -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By f ...

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

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

  9. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

最新文章

  1. 【OpenCV 4开发详解】图像透视变换
  2. 985硕博导师:如果你没空看书,我强烈建议你做这件事
  3. 动态规划入门 洛谷P1108 低价购买
  4. 数值分析与算法-喻文健-国科大
  5. 深入浅出Spring Boot,你和大神的差距,就只有这份文档的距离
  6. 数学--数论--POJ281(线性同余方程)
  7. Ubuntu下无法看到共享文件夹的解决办法
  8. 字符串查找函数(BF)
  9. linux卸载kong,Ubuntu 源码安装Kong
  10. luoguP1594 护卫队
  11. [译]简单声明Lua类
  12. On-Ramp算法参考资料
  13. Linux怎么样修改文件编码,Linux下批量修改文件编码
  14. el-table表头自定义总计
  15. Leetcode 517. Super Washing Machines
  16. 天下英雄出我辈 一入江湖岁月催 《江湖行》
  17. 计算机考研408复试(面试)问题——数据结构
  18. R语言实战笔记--第十五章 处理缺失数据
  19. Request(HTTP请求对象)的笔记和底层原理
  20. 转:vue-cli的webpack模板项目配置文件分析

热门文章

  1. 生成器设计模式(Builder Design Pattern)[论点:概念、图示、示例、框架中的应用、场景]
  2. php怎么将字符串转为数字类型,利用PHP怎么将字符串转换成数字
  3. 从微信官方获取微信公众号二维码(名片)
  4. c语言中字节 字 位 bit,bit的意思是____。
  5. 【云原生 | 41】Docker快速部署面向统计分析和绘图语言R
  6. rknn的后处理代码分析
  7. java 如何将word 转换为ftl_word转化为ftl模板 word文档转化成ftl文件
  8. 别再找借口了!找不到工作还不好好学一下这份16W字Java面试合集
  9. 传感器标定(1.单目相机的标定)
  10. OAI搭建步骤(EPC+eNB)