淘宝生意参谋数据自动化采集,
前面做了情报通的自动化采集
原文链接:https://blog.csdn.net/qq_35866846/article/details/103298524
so easy
老板发话让搞下sycm,我以为跟qbt一样简单
结果打脸了,真真是出师未捷身先死啊!
登录界面搞了一周,最后还是手动登录的
不得不说tb是真的强大,
感受下写了多少版本,中间走了不少弯路,也是技术不太行,绕过cookies应该是可以的,对应的2、3、4用了三种方法绕,最后绕过去了,但是不稳定,容易掉线,windows是pywin32可以访问,但是不太懂windows的句柄操作,就放弃了,还有其他版本都是对应网上资料一点点儿试的,最后登进去就很简单了

所以这次爬虫有一个难点,一个坑(这个坑填了半天)
难点:绕过反爬机制检测
坑:鼠标悬停,点击一次调出浮窗,再点击一次关闭浮窗,没有浮窗,悬停无法交互,所以很坑

绕过反爬机制检测:网上很多种方法,最后还是这个靠谱,还有其他的,有兴趣的可以试试,我是没成功

#修改windows.navigator.webdriver,防机器人识别机制,selenium自动登陆判别机制
chrome_options.add_experimental_option('excludeSwitches', ['enable-automation'])

就是绕过这个玩意

当出现这个玩意的时候,手动人工登录也不让你登,会出现滑块儿验证,但是你怎么都验证不过去,
不得不说,阿里真会玩人
简单说下原因,也是这几天查了无数资料了解到的,
原本最安全最仿真的selenium库从18年开始受到各方平台压榨,就是你的selenium是可以被检测出来的,高端玩家像sycm直接不让你玩了,其他小型平台还是不会管你的,只要你不是太过分挤得人家服务器不能用了,所以爬虫——要轻点儿来!

检测机制:selenium调用驱动打开浏览器,在控制台windows.navigator.webdriver会标记FALSE,手工正常打开的浏览器控制台windows.navigator.webdriver的结果是True,所以网上对应还用种方法,post请求时截断某文件,强行修改参数,我用的这个方法是调用驱动时添加控制参数,不知道有什么区别,我没截断成功

from selenium import webdriver
import time,os,shutil
from  lxml import  etree  # xpath解析库
import requests,random
import pandas as pd
import numpy as np
from selenium.webdriver.common.action_chains import ActionChains
import datetime#手动登录并点击到市场大盘
def login(extension_path,tmp_path):chrome_options = webdriver.ChromeOptions()# 设置好应用扩展chrome_options.add_extension(extension_path)#添加下载路径prefs = {'profile.default_content_settings.popups': 0, 'download.default_directory':tmp_path}chrome_options.add_experimental_option('prefs', prefs)#修改windows.navigator.webdriver,防机器人识别机制,selenium自动登陆判别机制chrome_options.add_experimental_option('excludeSwitches', ['enable-automation']) drive = webdriver.Chrome(chrome_options=chrome_options)url = 'https://sycm.taobao.com/portal/home.htm'drive.get(url)input("请手动登录,成功后输入【1】:")#叉掉页面无关元素后再输入1继续执行drive.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[2]/section[2]/div/div[1]/ul/li[14]/a/span').click()#点击市场tm=random.uniform(1,4)time.sleep(tm)drive.find_element_by_xpath('//*[@id="app"]/div/div[1]/div[3]/div[1]/aside/div/ul/li[2]/ul/li[1]/a/span').click()#点击市场大盘tm=random.uniform(1,4)time.sleep(tm)drive.maximize_window() #窗口最大化tm=random.uniform(1,4)time.sleep(tm)return drive#点击各指标加载数据
def load_data(drive):for i in [1,2]:for j in range(1,6):drive.find_element_by_xpath('//*[@id="cateTrend"]/div[2]/div/div[1]/div/div/div[%s]/div[%s]'%(i,j)).click()tm=random.uniform(2,4)time.sleep(tm)def load_leimu(drive,start,end,tmp_path,data_path):#获取当前查询日期current_Date=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[2]/div/div/div[1]').text[5:]first_date=(pd.to_datetime(current_Date)+datetime.timedelta(days=-30)).strftime('%Y-%m-%d')#点击分类——打开悬浮drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/a').click()#获得一级类目数量links = drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul[2]').find_elements_by_tag_name("li")leimu_num=len(links)#点击分类——关闭悬浮drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/a').click()for i in range(1,leimu_num+1):#点击分类——打开悬浮drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/a').click()level_1=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul[2]/li[%s]'% i)actions = ActionChains(drive).move_to_element(level_1).perform()#鼠标悬停在一级类目上tm=random.uniform(1,2)time.sleep(tm)#获得二级类目个数links_2 = drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul[1]').find_elements_by_tag_name("li")leimu_num_2=len(links_2)
#         print(leimu_num_2)#打印类目数量#点击分类——关闭悬浮drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/a').click()#获取二级类目for j in range(1,leimu_num_2+1):#点击分类——打开悬浮drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/a').click()level_1=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul[2]/li[%s]'% i)actions = ActionChains(drive).move_to_element(level_1).perform()#鼠标悬停在一级类目上#           获得一级类目名称——元素的title属性title_1=level_1.get_attribute('title')#替换类目名称里的特殊字符title_1=title_1.replace("/","_")level_2=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[1]/div/div/div/div[2]/ul[1]/li[%s]'%j)#获得二级类目名称——元素的title属性title_2=level_2.get_attribute('title')#替换类目名称里的特殊字符title_2=title_2.replace("/","_")#         print(title)#点击二级类目level_2.click()tm=random.uniform(3,5)time.sleep(tm)#加载二级类目下各指标数据load_data(drive)drive.find_element_by_xpath('//*[@id="xws-ext-tool"]/span').click()#小旺神转化tm=random.uniform(2,5)time.sleep(tm)drive.find_element_by_xpath('//*[@id="xws-table_wrapper"]/div[1]/button[1]').click()#导出数据tm=random.uniform(2,3)time.sleep(tm)f = os.listdir(tmp_path)[0]while "crdownload" in f:tm=random.uniform(3,4)time.sleep(tm)f = os.listdir(tmp_path)[0]#注意替换类目名称里的路径字符#找到老的文件所在的位置old_file=os.path.join(tmp_path,f)#指定新文件的位置new_file=os.path.join(data_path,title_1+"—"+title_2+start+"—"+end+".csv")os.rename(old_file,new_file)print("----------%s下载已完成---------"%(title_1+"—"+title_2+start+"—"+end))tm=random.uniform(3,5)time.sleep(tm)drive.find_element_by_xpath('//*[@id="xws-modal-block"]/div[2]/div/div[1]/button').click()#关闭小旺神tm=random.uniform(2,4)time.sleep(tm)tm=random.uniform(4,5)time.sleep(tm)print("日期范围 %s —— %s 内所有二级类目数据下载完成"(current_Date,first_date))return first_date
extension_path = r"xxx.crx"#加载小旺神
tmp_path="" #设置临时下载路径
data_path=''#设置文件重命名后存储路径
start_date=input("请输入开始日期:")#需要下载的开始日期
end_date=input("请输入结束日期:")#需要下载的结束日期drive=login(extension_path,tmp_path)#登录并进入市场大盘
**#叉掉页面无关元素后再输入1继续执行**  一定要叉掉,否则无法读取页面元素
while end_date>=start_date:#校准日期序列#获取页面日期current_Date=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[2]/div/div/div[1]').text[5:]while  current_Date!=(str(pd.to_datetime(end_date))[:10]):#校准页面日期#点击上一天drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[2]/div/div/div[2]/button[6]').click()tm=random.uniform(1,3)time.sleep(tm)current_Date=drive.find_element_by_xpath('//*[@id="content-container"]/div[2]/div[2]/div[1]/div/div/div/div/div[1]/div[2]/div/div/div[1]').text[5:]tm=random.uniform(1,3)time.sleep(tm)end=end_datestart=(pd.to_datetime(current_Date)+datetime.timedelta(days=-29)).strftime('%Y-%m-%d')end_date=load_leimu(drive,start,end,tmp_path,data_path)tm=random.uniform(1,3)time.sleep(tm)

出师未捷身先死的sycm数据自动化相关推荐

  1. selenium的封杀与突破,记录一次出师未捷身先死,淘宝、美团对爬虫的深入打击

    做爬虫,出师未捷身先死,体会过吗?!!! 最近在做一个国外的网站爬虫中文名叫蝙蝠,有网友这样介绍的:"贸易中介类的网站,PR值是6,网站比较可靠":上面记录了很多公司的信息,如电话 ...

  2. 用python做一些excel的事情,实现数据自动化

    用了一段时间的python ,发觉python这小伙确实是做自动化的一把好手,鉴于python在自动化方面的良好的能力,python在自动化测试,自动化运维,爬虫等方面都有着良好的表现. 我们在日常工 ...

  3. python自动化数据报告_如何:使用Python将实时数据自动化到您的网站

    python自动化数据报告 This tutorial will be helpful for people who have a website that hosts live data on a ...

  4. stm8L ADC多通通DMA采集和EEPROM一起使用解决死机和数据错位问题——寄存器

    一.简介 现象:本实验在使用ADC+DMA+EEPOM实验室,在eeprom写入数据的时候单片机死机,我在写eerpom时关闭adc和关闭dma,写完之后开启adc和dma单片机就不死机了,然后就出现 ...

  5. 出师未捷身先死 常使英雄泪满襟——记伍楚华

    出师未捷身先死 常使英雄泪满襟 文/孺子牛 这是一张全家福的照片,站在后排的年青小伙子,名叫伍楚华.在<竢实扬华 自强不息 -从山海关北洋铁路官学堂到西南交通大学>一书中,我们介绍了他献身 ...

  6. gitlab数据自动化备份到其他服务器

    gitlab数据自动化备份到其他服务器 gitlab配置本地自动备份 1.本地部署完成的gitlab服务器上操作,手动备份 gitlab-rake gitlab:backup:create 特别说明: ...

  7. 【Python】如何在Excel中调用Python脚本,实现数据自动化处理

    这次我们会介绍如何使用xlwings将Python和Excel两大数据工具进行集成,更便捷地处理日常工作. 说起Excel,那绝对是数据处理领域王者般的存在,尽管已经诞生三十多年了,现在全球仍有7.5 ...

  8. 基于激光点云数据自动化实现道路标线分类、提取及矢量化

    Automatic Road Markings Extraction Classification And Vectorization Mobile From Laser Scanning Data ...

  9. Python爬虫:老兵不死,用数据纪念2019男篮世界杯

    男篮世界杯已经落下帷幕,相信看球的朋友们都已经过足了篮球瘾.有些许遗憾,也有世界霸主的失落,还有老兵不死的坚持,当然还有斗牛军团的登顶. 自杀式输给波兰,溃败式负于尼日利亚,从前一直代表亚洲征战奥运会 ...

最新文章

  1. python入门必备10个坑_适合 Python 初学者的一些技巧和坑
  2. C++ int与string的相互转换(含源码实现)
  3. java可以用 lt =判断int吗_int 和 integer:装箱和拆箱的过程,会用到什么方法
  4. MAR-8ASM射频放大器测试
  5. oracle 查询无限开始,Oracle无限分级下查询指定分类下所有子分类Sql
  6. Flask实战2问答平台-登录限制(装饰器)
  7. matlab 边界连续,matlab的边界问题
  8. SAP UI5里使用jQuery.ajax采用同步的方式读取数据
  9. php下载文件代码 数据库,PHP备份数据库生成SQL文件并下载的函数代码
  10. 第三部分 03 使用HTTP GET进行调用
  11. get_free_page 和其友
  12. c# asp.net RangeValidator(范围验证)控件(11)
  13. PAT (Basic Level) Practice1004 成绩排名
  14. Word 公式编辑器: 快捷键
  15. 【转】网站ICP备案和公安备案流程
  16. 经典卷积网络--ResNet残差网络
  17. 50个查询系列-第五个查询:查询没学过“叶平”老师课的同学的学号、姓名;...
  18. Altium designer AD原理图导入word文档、pdf,生成矢量图的方法;
  19. 三维旋转矩阵;东北天坐标系(ENU);地心地固坐标系(ECEF);大地坐标系(Geodetic);经纬度对应圆弧距离
  20. 【django】settings.py配置文件内容详细介绍

热门文章

  1. 杰理之杰理之家,播歌声音小,杰理之家调EQ声音小【篇】
  2. PCIE2PCI104载板转接卡
  3. 996 有加班费,那加班是否合算?
  4. Elasticsearch高级操作 (关键字精确查询)
  5. CUDA(33)之ETH Mining(Parallel-mining project based on Opencl/GPU )
  6. S60 手机操作系统数字签名安全机制与软件签名原理
  7. 微信小程序开发入门-个人笔记
  8. 瑞芯微RK3188芯片datasheet、原理图下载
  9. 各个版本的 Mac OS U盘终端制作命令
  10. Android视频播放器ExoPlayer全屏