因为我是个爬虫新手,所以对爬虫还不熟练,这几天想着自己做一个淘宝信息的自动爬取,一开始感觉比较简单,但做到了登录界面,发现一直被网站检测出来,不能滑动滑块。接下来从网上翻遍了资料,整理了以下自己的代码,完成了这个艰难的工程(嘻嘻,对我来说)下面先把代码放上来,想做这个项目的小伙伴可以复制。

from selenium import webdriver
from selenium.webdriver import ChromeOptions
#导入显性等待库
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import  expected_conditions as ec
from selenium.webdriver.common.by import By
import time
import pymysqlimport timeclass Information:def __init__(self,shop_name,use_name,passward):self.option_ = webdriver.ChromeOptions()self.option_.add_experimental_option('excludeSwitches',['enable-automation'])self.driver_ = webdriver.Chrome(options=self.option_)#添加反检测self.driver_.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})self.user_name = use_nameself.passward = passwardself.shop_name = shop_name   #确定搜索的商品名字#向首页发送请求self.driver_.get('https://www.taobao.com/')def search(self):self.input = self.driver_.find_element_by_xpath('//*[@id="q"]') #定位到输入框self.input.send_keys(self.shop_name)self.driver_.find_element_by_xpath('//*[@id="J_TSearchForm"]/div[1]/button').click()self.login()def login(self):print(f'正在登录{self.user_name}的账户')#定位到账号self.driver_.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(f'{self.user_name}')#定位到密码中self.driver_.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(f'{self.passward}')#定位到登录self.driver_.find_element_by_xpath('/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()time.sleep(5)   #设置等待时间 避免页面没加载完就开始爬取self.collect()def collect(self):#商品名称self.all_names = self.driver_.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[*]/div[2]/div[2]/a')#商品价格self.all_prices = self.driver_.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[*]/div[2]/div[1]/div/strong')#商品产地self.all_places = self.driver_.find_elements_by_xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div[*]/div[2]/div[3]/div[1]/a/span[2]')#商品网址self.all_htmls = self.driver_.find_elements_by_xpath('')print(len(self.all_names))print(len(self.all_prices))print(len(self.all_places))print('获取完成,开始录入')print('链接数据库中...')print(f'正在录入{self.shop_name}信息....')# 链接数据库self.con = pymysql.connect(host='localhost',user='root',password='asdjkl456',database='xiaole')#创建游标对象self.cur = self.con.cursor()# 创建表格print(f'创建{self.shop_name}表...')self.sql = f'''CREATE table {self.shop_name} (id int primary key auto_increment,商品名称 varchar(100),商品价格 varchar(10),商品产地 varchar(50))charset=utf8;'''self.cur.execute(self.sql)print(f'{self.shop_name}表创建完成')# 循环输出各个标题for self.i  in range(len(self.all_names)):# print(info_element.text)#存入数据print(f'第{self.i}条数据正在录入...')self.sql = f'insert into {self.shop_name}(商品名称,商品价格,商品产地) values("{self.all_names[self.i].text}","{self.all_prices[self.i].text}","{self.all_places[self.i].text}")'self.cur.execute(self.sql)self.con.commit()
#
#
#
shop_name = input('请输入你想查找的商品:')
user_name = input('请输入你的淘宝账号:')
passward = input('请输入你的淘宝密码:')
information = Information(shop_name,user_name,passward)
information.search()#问题一:无法直接进入搜索   ==》  先进入登录界面,点击登录后会出现滑块
#问题二:无法滑动滑块  ==》 ???  添加等待,人工滑完在进入下一步  显性等待
#问题三:手动滑完滑块会被检测出来是爬虫在滑,会报错  ==》 添加反检测#self.driver_.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {#     "source": """#     Object.defineProperty(navigator, 'webdriver', {#       get: () => undefined#     })#   """# })

接下来我来讲一下我的项目步骤

step 1.导包(毕竟python的优点就在这里,库多)

     

from selenium import webdriver   #selenium库
from selenium.webdriver import ChromeOptions
import time   #设置时间
import pymysql   #数据库

        step 2.访问淘宝首页

#创建浏览器对象
self.driver_ = webdriver.Chrome()
#向首页发送请求
self.driver_.get('https://www.taobao.com/')

step 3.在淘宝首页用selenium进行自动化输入搜索的商品

    def search(self):self.input = self.driver_.find_element_by_xpath('//*[@id="q"]') #定位到输入框self.input.send_keys(self.shop_name)  #self.shop_name 为要搜索的商品名称#点击搜索self.driver_.find_element_by_xpath('//[@id="J_TSearchForm"]/div[1]/button').click()

        鼠标右键检查进入element界面,点击左上角的鼠标形状的图案,在点击输入框,就可以找到输入框在elements的位置,鼠标放到元素所在的位置,右键==》copy==》copy xpath,复制输入框元素的xpath值,利用selenium的定位方法(find_element_by_xpath,或其他定位方法)选中输入框,再利用send_keys()函数进行传值,利用相同方法定位到搜索并使用click()函数进行点击进入下一界面==》登录界面

step 4.模拟登录(重点)

    先将代码奉上

    def login(self):print(f'正在登录{self.user_name}的账户')#定位到账号self.driver_.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(f'{self.user_name}')#定位到密码中self.driver_.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(f'{self.passward}')#定位到登录self.driver_.find_element_by_xpath('/html/body/div/div[2]/div[3]/div/div/div/div[2]/div/form/div[4]/button').click()time.sleep(5)   #设置等待时间 避免页面没加载完就开始爬取self.collect()

定位账号,密码两个输入框和上一步定位物品搜索框步骤一致

输入完之后点击登录,发现多了滑块滑动验证码,即使你是用滑块滑动方法(那个手机号我是滑完滑块后删除的(个人隐私不方便透露)),仍会给你报错

,到了这里你就要考虑是不是已经被淘宝检测出来了,

可以使用window.navigator.webdriver来进行一个自我查看,如果结果为true,就代表着被检测了出来

接下来要说的就是selenium的反检测

我们都知道使用selenium进行网站登录,只是模拟用户登录,而并不是变成真实用户,有一些网站因为保护措施较严,selenium被检测出来的几率很大我们可以使用反检测代码进行selenium的伪装

    def __init__(self,shop_name,use_name,passward):self.option_ = webdriver.ChromeOptions()self.option_.add_experimental_option('excludeSwitches',['enable-automation'])self.driver_ = webdriver.Chrome(options=self.option_)# 添加反检测self.driver_.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})

添加完之后,再次运行代码,会发现点击登录后直接进入商品搜索界面

进入到这里之后就可以任性发挥了,想获取商品名称,商品价格,生产厂商的数据都可以,需要的话链接数据库,把爬下来的数据放进数据库

selenium+chormdriver+python 实现淘宝的信息爬取相关推荐

  1. 使用python requests+re库+curl.trillworks.com神器 实现淘宝页面信息爬取

    慕课[Python网络爬虫与信息提取]课程随手练习~! 和嵩天老师课程中的示范不同的是,淘宝页面现在不能直接爬取,要修改下访问请求的headers表头信息. 目标:使用python的requests+ ...

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

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

  3. 淘宝商品信息爬取(已登录)

    感谢此链接对淘宝登录的帮助 已成功爬取,以下是源代码: # 目标:获取淘宝搜索页面的信息 提取其中的商品名称和价格 # 理解:1.淘宝的搜索接口 2.翻页处理 # 技术路线:requests re # ...

  4. 淘宝商品信息爬取,实现词云,并进行饼状图绘制及效果图

    对应json文件地址:https://blog.csdn.net/nicholas_K/article/details/86094530 1. 获取了淘宝手机商品的评论和追评 2. 对淘宝评论进行了词 ...

  5. 网络爬虫信息之实战淘宝书包信息爬取14

    # 导入requests和re正则库 import requests import re# 定义第一个函数实现获取网页数据 def getHTMLText(url,loginheaders):try: ...

  6. 爬虫——BeautifulSoup 淘宝模特信息爬取

                                                (仅供参考) import os import requests from bs4 import Beautif ...

  7. python爬虫—关于淘宝商品的爬取

    之前爬过一次淘宝,当时这个网站没怎么设置很厉害的反爬措施,能够很轻松地获取上面的数据:销量啊.价格啊.以及好评等等,做一些可视化的图表,对于将要在淘宝平台售卖商品的商家具有很好的参考意义. 现在的淘宝 ...

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

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

  9. 淘宝众筹数据爬取(1)

    众筹是现阶段小微或初创企业比较重要的融资渠道之一,也获得了很多研究者的关注.然而众筹的研究需要获取众筹项目的大量数据,单靠手工录入数据确实比较让人讨厌, 速度慢也比较啰嗦.前文中我们已经了解了静态网页 ...

最新文章

  1. 非对称加密算法RSA公钥私钥的模数和指数提取方法
  2. Nature:希望你在读博士之初就能知道的 20 件事
  3. 5-Interrupt Management Framework
  4. Windows 程序设计技巧
  5. 作为一个程序员,CPU的这些硬核知识你必须会!
  6. requests之json系列(一)
  7. 2021年福建高考省检成绩查询,福建省教育考试院:2021年福建高考查分入口、查分系统...
  8. yuicompressor java_YUI Compressor使用配置方法 JS/CSS压缩工具
  9. 注意!黑客可以通过CSS3功能攻击浏览器
  10. pikachu靶场打靶分析
  11. win7系统服务优化——服务列表禁止项
  12. Pickers应用程序
  13. sql monitor简介
  14. android apk sign,apk文件的sign以及align命令
  15. 脉冲式和相位式激光测距
  16. 360°全景影像建库流程
  17. 常用图标素材分享网站
  18. UESToj 1057 秋实大哥与花 ( 线段树
  19. 狂神mysql笔记 md_MyBatis狂神总结笔记
  20. hadloop大数据平台论文_大数据平台建设探讨

热门文章

  1. MacOS对文件夹加密的方法
  2. sso单点登陆实现过程汇总记录
  3. 在Unity使用键盘控制摄像机的移动以及用鼠标滚轮控制摄像机视野放大和缩小
  4. 如何让会议更加快速有效
  5. vsan虚拟化和共享存储服务器,恰逢其时:当VSAN遇到浪潮云海桌面一体机
  6. 网络爬虫:基于有道的文本翻译
  7. 错觉图片生成实验 - 正方形错觉
  8. 无线路由器首次配置、修改WiFi名称和密码—— Cisco实验/家里实验
  9. 【Vant相关知识】
  10. allure测试报告怎么清除历史记录的数据,只展示当前运行结果内容