在使用selenium来模拟浏览器操作,抓取淘宝商品信息前,先完成一些准备工作。

准备工作:需要安装selenium,pyquery,以及Chrome浏览器并配置ChromeDriver。

安装selenium:pip install selenium
安装pyquery:pip install pyquery
ChromeDriver配置:参考Window 下配置ChromeDriver

做好这些之后开始进入正题:选择各类品牌男鞋销量高到低进行爬取

1、突破反爬虫

要爬取淘宝首先要突破淘宝的反爬机制,这里用selenium模拟器微博登陆淘宝
通过模拟点击网页输入登陆淘宝

#对象初始化
def __init__(self):url = 'https://login.taobao.com/member/login.jhtml'self.url = urloptions = webdriver.ChromeOptions()options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度options.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumself.browser = webdriver.Chrome(options=options)self.wait = WebDriverWait(self.browser, 10) #超时时长为10s#登录淘宝
def login(self):# 打开网页self.browser.get(self.url)# 自适应等待,点击密码登录选项self.browser.implicitly_wait(30) #智能等待,直到网页加载完毕,最长等待时间为30sself.browser.find_element_by_xpath('//*[@class="forget-pwd J_Quick2Static"]').click()# 自适应等待,点击微博登录宣传self.browser.implicitly_wait(30)self.browser.find_element_by_xpath('//*[@class="weibo-login"]').click()# 自适应等待,输入微博账号self.browser.implicitly_wait(30)self.browser.find_element_by_name('username').send_keys(weibo_username)# 自适应等待,输入微博密码self.browser.implicitly_wait(30)self.browser.find_element_by_name('password').send_keys(weibo_password)# 自适应等待,点击确认登录按钮self.browser.implicitly_wait(30)self.browser.find_element_by_xpath('//*[@class="btn_tip"]/a/span').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)

2、页面爬取
根据类别商品对应的元素进行爬取

       data=["20578","20579","29529","3424764","29510","20069292","3227291","20592","49429","31840","40843","20581","32462"]num=["0","44","88"]# 对我已买到的宝贝商品数据进行爬虫for i in range(len(data)):for j in range(len(num)):self.browser.get("https://s.taobao.com/search?q=%E7%94%B7%E9%9E%8B&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190403&ie=utf8&cps=yes&ppath=20000%3A"+data[i]+"&sort=sale-desc"+"&bcoffset=0&p4ppushleft=%2C44&s="+num[j])# 遍历所有页数#for page in range(1,13):# 等待该页面全部已买到的宝贝商品数据加载完毕#good_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > div.J_MouserOnverReq')))# 获取本页面源代码html = self.browser.page_source# pq模块解析网页源代码doc = pq(html)

3、信息爬取
这里爬取商品的价格、销量、介绍、地址和图片链接

# 遍历该页的所有宝贝data1=[]taobao_data1=[]for item in good_items:money = item.find('.g_price-highlight').text().replace('\n', "").replace('\r', "")number = item.find('.deal-cnt').text().replace('\n', "").replace('\r', "")Introduction = item.find('.row.row-2.title').text().replace('\n', "").replace('\r', "")location = item.find('.row.row-3.g-clearfix').text().replace('\n', "").replace('\r', "")href=item.find('.J_ItemPic.img').attr("data-src")print(money, number, Introduction, location,href)data1.append([money, number, Introduction,location,href])

4、信息存储
这里把爬取的信息放入json文件

                for each in data1:taobao_data1.append({"money": each[0],"number": each[1],"Introduction": each[2],"location": each[3],"href": each[4]})with open('hello.json', 'a', encoding='utf-8') as f:f.write(json.dumps(taobao_data1, indent=2, ensure_ascii=False))

最后附上完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
from time import sleep
import random
import json
import time
#定义一个taobao类
class taobao_infos:#对象初始化def __init__(self):url = 'https://login.taobao.com/member/login.jhtml'self.url = urloptions = webdriver.ChromeOptions()options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 不加载图片,加快访问速度options.add_experimental_option('excludeSwitches', ['enable-automation']) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Seleniumself.browser = webdriver.Chrome(options=options)self.wait = WebDriverWait(self.browser, 10) #超时时长为10s#登录淘宝def login(self):# 打开网页self.browser.get(self.url)# 自适应等待,点击密码登录选项self.browser.implicitly_wait(30) #智能等待,直到网页加载完毕,最长等待时间为30sself.browser.find_element_by_xpath('//*[@class="forget-pwd J_Quick2Static"]').click()# 自适应等待,点击微博登录宣传self.browser.implicitly_wait(30)self.browser.find_element_by_xpath('//*[@class="weibo-login"]').click()# 自适应等待,输入微博账号self.browser.implicitly_wait(30)self.browser.find_element_by_name('username').send_keys(weibo_username)# 自适应等待,输入微博密码self.browser.implicitly_wait(30)self.browser.find_element_by_name('password').send_keys(weibo_password)# 自适应等待,点击确认登录按钮self.browser.implicitly_wait(30)self.browser.find_element_by_xpath('//*[@class="btn_tip"]/a/span').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 swipe_down(self,second):for i in range(int(second/0.1)):#根据i的值,模拟上下滑动if(i%2==0):js = "var q=document.documentElement.scrollTop=" + str(300+400*i)else:js = "var q=document.documentElement.scrollTop=" + str(200 * i)self.browser.execute_script(js)sleep(0.1)js = "var q=document.documentElement.scrollTop=100000"self.browser.execute_script(js)sleep(0.1)# 爬取淘宝 我已买到的宝贝商品数据def crawl_good_buy_data(self):data=["20578","20579","29529","3424764","29510","20069292","3227291","20592","49429","31840","40843","20581","32462"]num=["0","44","88"]# 对我已买到的宝贝商品数据进行爬虫for i in range(len(data)):for j in range(len(num)):self.browser.get("https://s.taobao.com/search?q=%E7%94%B7%E9%9E%8B&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190403&ie=utf8&cps=yes&ppath=20000%3A"+data[i]+"&sort=sale-desc"+"&bcoffset=0&p4ppushleft=%2C44&s="+num[j])# 遍历所有页数#for page in range(1,13):# 等待该页面全部已买到的宝贝商品数据加载完毕#good_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > div.J_MouserOnverReq')))# 获取本页面源代码html = self.browser.page_source# pq模块解析网页源代码doc = pq(html)# # 存储该页已经买到的宝贝数据good_items = doc('#mainsrp-itemlist .J_MouserOnverReq').items()# 遍历该页的所有宝贝data1=[]taobao_data1=[]for item in good_items:money = item.find('.g_price-highlight').text().replace('\n', "").replace('\r', "")number = item.find('.deal-cnt').text().replace('\n', "").replace('\r', "")Introduction = item.find('.row.row-2.title').text().replace('\n', "").replace('\r', "")location = item.find('.row.row-3.g-clearfix').text().replace('\n', "").replace('\r', "")href=item.find('.J_ItemPic.img').attr("data-src")print(money, number, Introduction, location,href)data1.append([money, number, Introduction,location,href])for each in data1:taobao_data1.append({"money": each[0],"number": each[1],"Introduction": each[2],"location": each[3],"href": each[4]})with open('hello.json', 'a', encoding='utf-8') as f:f.write(json.dumps(taobao_data1, indent=2, ensure_ascii=False))print('\n\n')# 大部分人被检测为机器人就是因为进一步模拟人工操作# 模拟人工向下浏览商品,即进行模拟下滑操作,防止被识别出是机器人# 随机滑动延时时间swipe_time = random.randint(1, 3)self.swipe_down(swipe_time)sleep(2)print('\n\n')if __name__ == "__main__":weibo_username ='xxxxxxxx" #改成你的微博账号weibo_password = "xxxxxxxx" #改成你的微博密码a = taobao_infos()a.login() #登录a.crawl_good_buy_data() #爬取淘宝 我已买到的宝贝商品数据

爬虫学习笔记——Selenium爬取淘宝商品信息并保存相关推荐

  1. python爬虫——用selenium爬取淘宝商品信息

    python爬虫--用selenium爬取淘宝商品信息 1.附上效果图 2.淘宝网址https://www.taobao.com/ 3.先写好头部 browser = webdriver.Chrome ...

  2. 利用Selenium爬取淘宝商品信息

    文章来源:公众号-智能化IT系统. 一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样. ...

  3. python+selenium爬取淘宝商品信息+淘宝自动登录——爬虫实战

    1.前言 继续学习爬虫内容,这回是以selenium模拟操作进行抓取,其中有几个需要登陆的注意事项. 2.自动登陆+查找页面 由于现在淘宝的反爬机制,需要登陆才好下一步操作.在搜索输入后页面会调入登陆 ...

  4. Python爬虫+selenium——爬取淘宝商品信息和数据分析

    浏览器驱动 点击下载chromedrive .将下载的浏览器驱动文件chromedriver丢到Chrome浏览器目录中的Application文件夹下,配置Chrome浏览器位置到PATH环境. 需 ...

  5. python使用Selenium爬取淘宝商品信息

           由于淘宝对自动化工具进行了识别,直接进入登录页面滑动二维码一直会报错,所以采取了曲线救国的方式,通过用微博账号来登录淘宝.刚自学<Python3网络爬虫开发实战>,和里面的代 ...

  6. 使用python selenium爬取淘宝商品信息 自动登录淘宝和爬取某一宝贝的主图,属性图和详情图等等

    selenium作为一个自动化测试工具非常好用,谁用谁知道啊. 先说如何登录淘宝,淘宝现在直接用会员名和密码登录会有滑块验证,找了网上说的几种方法和自己尝试了一番效果还是不太理想,实测过程中,即使滑块 ...

  7. python爬虫学习 之 定向爬取 淘宝商品价格

    python爬虫学习 之 定向爬取 淘宝商品价格 import requests import redef getHTMLText(url):try:r = requests.get(url, tim ...

  8. 使用Selenium爬取淘宝商品(绕过登录页面)

    文章目录 1.准备工作 2.接口分析 3.页面分析 4.获取商品列表 5.解析商品列表 6.保存到MongoDB 7.遍历每页 8.异常处理(绕过登录反爬机制) 方法一:修改ChromeDriver. ...

  9. 爬取淘宝商品信息selenium+pyquery+mongodb

    ''' 爬取淘宝商品信息,通过selenium获得渲染后的源码,pyquery解析,mongodb存储 '''from selenium import webdriver from selenium. ...

最新文章

  1. 头发一周洗几次才适宜? - 生活至上,美容至尚!
  2. java网络文章博客抓取系统_java 后端博客系统文章系统——No3
  3. vim下更省心地用中文
  4. BrowserSync开发利器
  5. Android 柱状图
  6. scrapy异步写入mysql_scrapy之异步写入数据库
  7. sosoapi的安装
  8. maven命令行创建项目,提示java.lang.NoClassDefFoundError: org/apache/maven/shared/invoker/MavenInvocationExcept
  9. asp.net网上订餐系统
  10. tftpd32Linux,Tftpd32 DNS服务器拒绝服务漏洞
  11. 【微信公众号开发系列文章】一、微信公众号开发环境搭建
  12. 小红书关键词搜索商品API接口(商品列表数据接口)
  13. 100句美文、150个哲理成语和9篇课本素材运用
  14. 计算机怎么没有word文档,电脑新建没有word文档怎么办 没有Word解决方法
  15. 2百度元老结论:web2.0创业时代将终结
  16. 《SysML精粹》学习记录--第十章
  17. Arduino人体红外模块控制
  18. python中将数字转换为字符串
  19. 公众号如何运营?教你几招超实用的公众号运营方法
  20. postgresql 数据库出现 autovacuum:VACUUM xxoo.xxoo (to prevent wraparound)

热门文章

  1. 京东APP百亿级商品与车关系数据检索实践 | 京东云技术团队
  2. [八省联考2018]林克卡特树lct
  3. “计算机系统概述”学习提纲
  4. 在职场上保持“升升”不息
  5. 牛客网 SQL大厂面试真题篇 SQL4 每个创作者每月的涨粉率及截止当前的总粉丝量
  6. java 多线程 动画_Java多线程实现简单动画(小球运动)效果
  7. 中南财经政法大学计算机考研难吗,中南财经政法大学考研难吗
  8. Unbuntu 下安装openoffice
  9. HTML 基础标签 (一)
  10. OpenOffice实现文件上传预览