简单说下做天猫爬虫的思路

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数据库

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

原文地址:https://www.cnblogs.com/slqt/p/9923712.html