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


前言

众所周知淘宝的反爬机制是越来越严格,如果用单纯的用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.text

    if '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_source
    html=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”回复“淘宝”获取,更多有趣的爬虫项目等你来
在这里插入图片描述
如果觉得这篇文章不错、或者对你有帮助的话就请点个赞吧,谢谢大家的观看

  • 7
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值