zoukankan      html  css  js  c++  java
  • 简单说下做天猫爬虫的思路

    1、需要用代理

    搞个代理ip池动态切换,预防被反爬虫机制毙掉ip

    获取代理ip的方式很多,我主要通过爬

    http://www.xicidaili.com/nn/网站,抓取ip后一个个检查是否有效,然后记录在本地文本,使用时读取文本这种方法方法有点笨,不过写起来简单

    注意天猫要用HTTPS代理,不是HTTP代理

    2、需要使用cookie

    最简单的办法就是手工登录,登录时抓包,复制黏贴cookie出来放到代码里,但这种cookie有使用限制

    最有效的办法就是用selenium模拟人工登录,然后抓包,复制黏贴cookie

    还有种有效办法是用typescript的mocha框架写一套前端访问脚本,抓取cookie存到本地

    抓到的cookie是字符串形式的,要切换成字典形式

    3、拼接搜索关键词

    搜索关键词要转换成gb2312格式,然后再进行urlencode编码

    用python来举例

    # 拼接检索关键词
    def make_search_words():
        words = ['奶粉', '婴儿']
        results = []
        for word in words:
            word = word.decode('utf8').encode('gb2312')
            results.append(urllib2.quote(word))
        return '+'.join(results)

    4、拼接URL

    如代码所示,q是关键词,sort是搜索方式,比如按销量就是d,s是展示的商品数目

    第一页s是0,每页60件,所以每页往上递增60

    url = 'https://list.tmall.com/search_product.htm?q={}&sort={}&s={}'.format(make_search_words(),
                                                                                   'd', product_num)
        print url
        r = requests.get(url, headers=headers, verify=False, cookies=cookie, proxies=proxies)
        if '亲,小二正忙,滑动一下马上回来' in r.text.encode('utf8'):
            print '执行失败,请检查代理或cookie'
            sys.exit(1)
        with open(save_file, 'w') as f:
            f.write(r.text.encode('utf8'))

    请求输入过多被反爬,或者cookie错误被屏蔽时会出现“亲,小二正忙,滑动一下马上回来”,所以用它来检验是否爬到了正确的页面

    5、解析数据

    以前我习惯用bs4,听说lxml是效率最高的,就用lxml吧

    from lxml import etree
        with open(save_file, 'r') as f:
            text = f.readlines()
        text = ''.join(text).decode('utf8')
        html_obj = etree.HTML(text)
    
        product_names = deque([])
        for a in html_obj.xpath("//a[@target='_blank']"):
    

      6、保存数据到sqllite数据库或mysql数据库

    不展示全部代码了,只提供思路,欢迎探讨

  • 相关阅读:
    ES6
    JavaScript中的Function
    正则表达式
    小程序---电影商城---娱乐---电影列表
    小程序---电影商城---第三方组件 vant(vant weapp)
    Nginx 日志格式
    隐藏响应中的server和X-Powered-By
    个人常用的正则表达式(偶尔更新)
    笔记-VUE滚动加载更多数据
    thinkphp5.1+ 使用 Redis 缓存
  • 原文地址:https://www.cnblogs.com/slqt/p/9923712.html
Copyright © 2011-2022 走看看