热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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


文章目录

  • 前言
  • 一、mitmdump配置
  • 二、登陆淘宝
  • 三、解析数据
  • 总结




前言

众所周知淘宝的反爬机制是越来越严格,如果用单纯的用selenium登录淘宝会出现万恶的滑块验证,这是因为淘宝检测出你是selenium,下面用mitmdump中间拦截修改伪装的方式“骗过”淘宝顺利登录爬取
先说明一下,mitmdump拦截有没有用,如果过从查看window.navigator.webdriver角度老说他还是True并没有改变,但是我用他确确实实顺利的爬到了数据 我用30页测试很顺利并没有出现异常,但是我尝试没有用mitmdump拦截时爬到十页就给我出滑块了,所以 这篇文章可以参考一下



提示:以下是本篇文章正文内容,下面案例可供参考


一、mitmdump配置

写一个HttpProxy文件
参考于:https://www.jianshu.com/p/368be2cc6ca1
代码如下(示例):

TARGET_URL = 'https://g.alicdn.com/secdev/sufei_data/3.6.8/index.js'
INJECT_TEXT = 'Object.defineProperties(navigator,{webdriver:{get:() => false}});'def response(flow):if flow.request.url.startswith(TARGET_URL):flow.response.text = INJECT_TEXT + flow.response.textif 'um.js' in flow.request.url or '115.js' in flow.request.url:# 屏蔽selenium检测print(flow.response.text)flow.response.text = flow.response.text + 'Object.defineProperties(navigator,{webdriver:{get:() => false}})'

二、登陆淘宝

选用扫码登录,看到登录界面后,点击扫码登录,手机扫码进行登录
代码如下(示例):

def get_url(key):bro.maximize_window() #最大化浏览器bro.get("https://s.taobao.com/search?q=%s&s=1" % (key)) #访问页面print("*"*30+"扫码登录"+"*"*30)sleep(40) #扫码登录等待时间#定位一共有多少页numb=bro.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text page=int(re.findall('(\d+)',numb)[0]) #用正则提取出来print("*"*30+"共%s页数据"%(page)+"*"*30)#根据页数来做循环for i in range(page):print("-" * 30)print("正在获取第%d页数据"%(i+1))bro.get("https://s.taobao.com/search?q=%s&s=%d"%(key,i*44))parser_product() #解析数据函数

三、解析数据

代码如下(示例):

def parser_product():text=bro.page_sourcehtml=etree.HTML(text)divs=html.xpath('//*[@id="mainsrp-itemlist"]/div/div/div[1]/div')for div in divs:dic={}dic["title"]=div.xpath('.//img[@class="J_ItemPic img"]/@alt')[0]dic["price"]=div.xpath('.//div[@class="price g_price g_price-highlight"]/strong/text()')[0]dic["payers"]=div.xpath('.//div[@class="deal-cnt"]/text()')[0]with open(".//taobao.csv", "a+", encoding="utf-8") as f:writer = csv.DictWriter(f, dic.keys())writer.writerow(dic)

总结

使用流程:

1.cmd进入当前文件夹 调用 mitmdump -s HttpProxy.py -p 9000
2.运行python程序
3.打开手淘,扫码登录

注意事项:

1.别爬的太频繁
2.有需求,建议分批次爬取
参考文章:https://www.jianshu.com/p/368be2cc6ca1

文章请转载标明出处

完整代码 请关注公众号“阿虚学Python”回复“淘宝”获取,更多有趣的爬虫项目等你来
在这里插入图片描述
如果觉得这篇文章不错、或者对你有帮助的话就请点个赞吧,谢谢大家的观看


推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • WPF开发心率检测大数据曲线图的高性能实现方法
    本文介绍了在WPF开发中实现心率检测大数据曲线图的高性能方法。作者尝试过使用Canvas和第三方开源库,但性能和功能都不理想。最终作者选择使用DrawingVisual对象,并结合局部显示的方式实现了自己想要的效果。文章详细介绍了实现思路和具体代码,对于不熟悉DrawingVisual的读者可以去微软官网了解更多细节。 ... [详细]
  • 本文总结了在编写JS代码时,不同浏览器间的兼容性差异,并提供了相应的解决方法。其中包括阻止默认事件的代码示例和猎取兄弟节点的函数。这些方法可以帮助开发者在不同浏览器上实现一致的功能。 ... [详细]
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
author-avatar
菜牛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有