准备工作

安装好selenium和浏览器驱动chromedriver。

淘宝爬虫过程分析加代码

1.页面请求分析
首先请求淘宝页面,然后输入要爬取的数据的关键词,没有登陆,此时会弹出登陆的窗口,采取模拟浏览器登陆形式进行登陆,之后获取页面的文本信息。
安装好浏览器驱动chromedriver,可以先配置其地址信息,实现代码如下:

chrome_driver = r"F:\python\python_environment\chromedriver.exe"
browser = webdriver.Chrome(executable_path=chrome_driver)
wait=WebDriverWait(browser,3)

采用selenium模拟浏览器爬取,获取关键字的搜索栏,和搜索按钮。采用webdriver的find方法传递关键字,获取‘搜索’的标签信息,模拟点击操作。

模拟登陆的实现,此处采用微博登陆,在登陆界面选择微博登陆方式,然后获取其标签信息,跳转登陆界面。
在登陆界面采用xpath解析输入框信息,在后台进行账号密码的填充,如果有验证码的话,同样获取验证码的标签信息,然后在后台手动验证(自己可以建一个验证码登陆的类模块,然后调用,自行验证)
此外,爬取的页面总数也要解析出来,便于后面实现多网页的爬取。实现的代码如下:

def search():browser.get('https://www.taobao.com')#sleep(5)#input = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR,'#q')))#submit=wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR,"#J_TSearchForm > div.search-button"))browser.find_element_by_name('q').send_keys('美食')sleep(2)browser.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()  ##搜索按钮# browser.find_element_by_xpath('//*[@class="forget-pwd J_Quick2Static"]').click() #点击密码登录sleep(3)#browser.find_element_by_name('weibo-login').click()browser.find_element_by_xpath('//*[@id="login-form"]/div[5]/a[1]').click() #点击微博登录sleep(3)browser.find_element_by_name('username').send_keys('电话')browser.find_element_by_name('password').send_keys('密码')a=input('请输入验证码:',) #如果有验证码,注释去掉browser.find_element_by_name('verifycode').send_keys(a)browser.find_element_by_xpath('//*[@id="pl_login_logged"]/div/div[7]/div[1]/a').click()sleep(5)#browser.find_element_by_xpath('//*[@id="J_SearchForm"]/button').click()  ##搜索#sleep(3)total=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]')print(total.text)sleep(3)get_products(1)return total.text

2.页面的数据解析
解析的数据主要有价格、商品标签、地区、购买数量、商家信息,这里主要采用find_elements_by_xpath方法,获取列表信息,然后进行分别存储。实现代码如下:

def get_products(page):price = browser.find_elements_by_xpath('//div[@class="price g_price g_price-highlight"]/strong')title = browser.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div/div[2]/div[2]/a')place = browser.find_elements_by_xpath('//div[@class="row row-3 g-clearfix"]/div[2]')buy_num = browser.find_elements_by_xpath('//div[@class="row row-1 g-clearfix"]/div[2]')shop=browser.find_elements_by_xpath('//div[@class="shop"]/a/span[2]')print('第', page, '页,共有---', len(price), '个数据')prices = []for i in price:try:price1 = i.textexcept:price1 == Noneprices.append(price1)print(prices)titles=[]for i in title:try:title1 = i.textexcept:title1==Nonetitles.append(title1)print(titles)places = []for i in place:try:place1 = i.textexcept:price1 == Noneplaces.append(place1)print(places)buy_nums = []for i in buy_num:try:buy_num1 = i.textexcept:buy_num1 == Nonebuy_nums.append(buy_num1)print(buy_nums)shops = []for i in shop:try:shop1 = i.textexcept:shop1 == Noneshops.append(shop1)print(shops)cur,coon=database()for i in range(len(price)):try:shop=shops[i]buy_num=buy_nums[i]price=prices[i]title=titles[i]place=places[i]ss = (str(shop),str(title), str(price), str(place), str(buy_num))print(ss)sql = "insert into taobao_food(shop,title,price,place,buy_num) VALUE('%s','%s','%s','%s','%s')" % sscur.execute(sql)except:passcoon.commit()print('------------------------------页数-------------------------------------')

3.多页爬取实现
解析完一页信息后,需要多页解析,此处实现主要是根据页面的“next”标识来实现功能,此处需要获取填写页数的标签信息,根据页码来实现翻页操作,进而实现翻页的操作,实现代码如下:

def next_page(page_number):try:input=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[2]/input')#填写页数submit=browser.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[2]/span[3]')#确定键input.clear()input.send_keys(page_number)submit.click()print('第' + str(page_number) + '页正在翻------------')#print(browser.find_element_by_css_selector('#mainsrp-pager > div > div > div > ul > li.item.active > span'))wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#mainsrp-pager > div > div > div > ul > li.item.active > span'),str(page_number)))get_products(page_number)except TimeoutError:next_page(page_number)

实现翻页以后,需要爬取多页数据,只需要加一个循环即可,不过中间需要时间等待,防止被页面检测出来,实现代码如下:

def main():total=search()time.sleep(random.uniform(8, 0))total=int(re.compile('(\d+)').search(total).group(1))#print(total)for i  in range(2,total+1):next_page(i)time.sleep(random.uniform(8, 10))

4.数据的保存
数据获取完以后,采用mysql进行存储起来,这里没有涉及建立数据库的操作,这个数据库建立可以在命令行上简单实现,连接数据库的实现代码如下:

def database():coon = pymysql.connect(host='localhost', user='root', passwd='123456',port=3306, db='taobao', charset='utf8')cur = coon.cursor()  # 建立游标return cur, coon

项目代码

爬取完数据以后,就是对数据的解析和可视化操作,实现的代码不再展示,放在git上,需要的可以在git上获取。
git连接:https://github.com/navigatorbo/taobao

selenium实现淘宝爬虫相关推荐

  1. selenium淘宝爬虫

    selenium淘宝爬虫 使用selenium做淘宝商品爬虫 1.准备工作 2.页面分析 3.代码实现 3-1.模拟登陆 3-2.商品列表页 3-3.获取商品信息 3-4.数据库设计 3-5.爬虫执行 ...

  2. 使用selenium进行淘宝购物测试

    文章目录 前言 一.登录滑块验证 二.搜索 三.跳转新窗口 前言 使用selenium进行淘宝购物测试 一.登录滑块验证 直接说结论:别用密码了,直接手动扫码登录 淘宝检测到selenium后你就没办 ...

  3. 爬虫项目四:2021最新测试可用淘宝爬虫

    文章目录 前言 一.mitmdump配置 二.登陆淘宝 三.解析数据 总结 前言 众所周知淘宝的反爬机制是越来越严格,如果用单纯的用selenium登录淘宝会出现万恶的滑块验证,这是因为淘宝检测出你是 ...

  4. 淘宝爬虫 TaoBaoCrawler

    TaoBao Crawler 星期一, 20. 十一月 2017 07:10下午 做图像处理和做物体识别检测的很多朋友都会有这样一个感受.没有数据集!!!!博主一直苦于没有数据集.而作为最大的,最集中 ...

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

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

  6. python自动下单源码_python+selenium实现淘宝双十一自动下单

    python+selenium实现淘宝双十一自动下单 # !/usr/bin/env python # 2020/05/20 # 淘宝秒杀脚本,扫码登录版 from selenium import w ...

  7. 淘宝爬虫、数据分析、童装

    淘宝爬虫.数据分析.童装 requests爬虫 数据处理 数据预处理 处理缺失值 处理sales列 处理location列 保存csv 数据分析 title 词云可视化 关键词的销量分析 店名 价格. ...

  8. python爬虫笔记(六)网络爬虫之实战(1)——淘宝商品比价定向爬虫(解决淘宝爬虫限制:使用cookies)...

    1.  淘宝商品信息定向爬虫 链接: https://www.taobao.com/ 2. 实例编写 2.1 整体框架 # -*- coding: utf-8 -*-import requests i ...

  9. 淘宝爬虫之强行登录如何解决Selenium被检测到的问题?

    近遇上一些反Selenium爬虫的情况,爬虫都会碰到某些网站刚刚打开页面就被判定为:非人类行为. 因为不少大网站有对selenium的js监测机制.比如navigator.webdriver,navi ...

最新文章

  1. BloomFilter–大规模数据处理利器(转)
  2. 从一点儿不会开始——Unity3D游戏开发学习(一)
  3. API Gateway简介
  4. php开发工程师考试试卷,腾讯PHP开发工程师面试试卷
  5. (137)FPGA面试题-Verilog HDL中function和task的区别(一)
  6. ECC椭圆曲线加密算法原理 | 比特币加密算法
  7. TextBox设置ReadOnly属性后后台得不到值解决方法 [转]
  8. LeetCode 中文刷题手册:LeetCode Cookbook下载
  9. 基于shotgun蛋白质组学的MaxQuant质谱计算平台
  10. 教你有效清理C盘空间不足的方法
  11. 知识图谱:语义网络、语义网、链接数据、知识图谱
  12. Windows打开软件老是弹出无法验证发布者
  13. 【技术类】【ArcGIS对国产卫星的支持2:高分一号卫星】篇8、无缝镶嵌产品生产
  14. adb命令之pm hide 与 disable
  15. 第1讲:进化心理学背景与渊源2
  16. python中哈希表和set的使用
  17. a a c语言表达式是,c语言中,已知a=12,则表达式a+=a-=a*=a的结果是什么,求步骤
  18. 构建之法 第三版 17 章 部分草稿
  19. Symbian 开源 免费下载
  20. cocosCreator原生平台编译测试

热门文章

  1. STUN/TURN协议
  2. android 简单的统计图,[简单的统计图.doc
  3. Exynos_4412——中断控制器
  4. C语言编程-猜数字程序
  5. VLC播放器所需的SPS,PPS获取方法
  6. ManagementClass类|获取系统硬件配置
  7. 协方差(Covariance)
  8. 【2018/10/16测试T3】长者
  9. 思科 路由与交换基础 实验一
  10. jQuery使用getJSON方法获取json数据完整示例