天猫爬虫程序分析

设备软件准备---环境安装配置

编写工具---pycharm、sublime text3等

运行环境—Python3.X

虚拟环境---virtualenv (主要是可以区别各个环境不同的需求包版本的问题)

爬虫程序编写---普通爬虫文件

请求方法---requests、urlopen等

解析库---xpath、bs4、pyquery等

URL链接地址:

1.根据自己的实际爬取需求设置分页的时候对有规律的URL进行分析

(1)以python为例,for循环,每循环一次的数值转化为string字符串 拼接到url中,如果不确定是否请求成功则可以进行验证后再提取数 据;例如下图:

    for i in range(1, 1000):
        url = "https://www.kuaidaili.com/free/inha/" + str(i) + "/"

请求头参数:

1.UA标识(某些网站可能根据UA进行反爬)

2.设置Cookie参数(一般情况下只需要登录一次之后拿到有效的cookie并且填入请求头即可

3.设置网页压缩格式 (请求头参数设置此项为了避免网页爬取后的数据为中文乱码,大部分是由于网页远吗被压缩了,所以我们需要解压缩

还有其他的一些参数就不罗列了,基本使用的就是这些

headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
            "Cookie": "channelid=bdtg_a3_a3a2; sid=1588040045318406; _ga=GA1.2.1750935230.1588040048; _gid=GA1.2.9785359.1588040048; Hm_lvt_7ed65b1cc4b810e9fd37959c9bb51b31=1588040048; Hm_lpvt_7ed65b1cc4b810e9fd37959c9bb51b31=1588040059",
        }

数据持久化—存储

存储数据---MySQL,Redis,MongoDB,txt,csv,doc,xlsx

1.数据库的话推荐使用redis数据库进行存储,基于内存,读取效率高,相对于MySQL的效率要高一些。并且没有复杂的建表建库操作,,直接可以在Python交互的时候设置好先关参数就可以建库并且存入数据

2.如果是商品信息的话可以将数据存储到csv和xlsx,也便于后期进行分析操作

IP代理

问题:IP代理这里最后说出来,,,很重要,,现在的网站几乎都会进行一个封ip的操作,就是对请求频率过高的用户暂时封禁IP地址访问网站。

解决方案:

1.在python中去设置代理的使用在代理ip有效的情况下进行请求数据,

2.代理的ip一般有许多免费的,但是避免不了去定期维护检测它的可用性,以便爬虫程序正常进行

下面是具体案例


def dailisss():
    try:
        requests.get('https://www.baidu.com ', proxies={"http": zongdaili})

    except:

        print('connect failed')
    else:
        print('success')
        con.rpush(zongdaili, 'ip_port')

这里我是使用了异常捕获;在验证后有效的则进行存储redis,否则不会存储,能够使用的代理则会立刻被爬虫程序进行使用,具体的使用如下:

爬取代理网站部分

def save_data(html):
global zongdaili
global daili, daili_port
datalist = etree.HTML(html)
datas = datalist.xpath('//*[@id="list"]')

# items_list = []

for data in datas:
    dailis = data.xpath('./table/tbody/tr/td[1]/text()')
    # print(dailis)

    daili_ports = data.xpath('./table/tbody/tr/td[2]/text()')

    for daili in dailis:
        continue
    for daili_port in daili_ports:
        continue
    zongdaili = daili + ":" + daili_port
    return zongdaili

实际的爬虫程序使用案例

def start_requests():  # 起始请求

    url = "https://www.qidian.com/search?kw=的"
    headers = {
        "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
        "Cookie": "gender=male; _csrfToken=ELmDEqeeVHqs1gkfYhqhJuHFHOwB2yIUkxzEDrdO; newstatisticUUID=1587804570_1531161900; tf=1; _qda_uuid=dc63dbaa-1d85-c654-e645-62d1d4be4e45; e1=%7B%22pid%22%3A%22qd_P_Searchresult%22%2C%22eid%22%3A%22%22%7D; e2=%7B%22pid%22%3A%22qd_P_Searchresult%22%2C%22eid%22%3A%22qd_S05%22%2C%22l1%22%3A3%7D",
        "Accept-Encoding": "gzip, deflate, br",  # 防止网页进行压缩导致的爬取后网页文字乱码

    }
    response = requests.get(url=url, headers=headers, proxies={"http": zongdaili})  # 拿到列表页
    if response.status_code == 200:
        html = response.text
        save_datas(html)  # 将列表页网页源码传递给save_data函数

天猫爬虫文件---数据抓取

天猫商城会对请求频率过高的用户弹出滑块验证码,对此我们可以借助上述提到的使用IP代理池进行爬取,也可以同时去设置请求的间隔时间,比如停止五秒请求一次,这一次便可请求商品列表页的其中一页

简单代码如下:

import requests
from lxml import etree
from time import sleep

def start_requests():

    """
    曾经沧海难为水,,,爬虫spider配天猫
    :return:
    """

    url = "https://list.tmall.com/search_product.htm?spm=a220m.1000858.0.0.65a43cdbn9Hln5&s=60&q=%C0%B2%C0%B2%C0%B2&sort=s&style=g&from=mallfp..pc_1_searchbutton&active=2&type=pc#J_Filter"

    headers = {
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15",
        "Cookie":"isg=BHZ2m9vaNG5aosCKRF7ACNetxap4l7rRQxbNtuBddtnLIxS9SCW64TYVO39PkLLp; l=eBP5sIUmQkd9eQsaBO5BEurza779uQA0zkPzaNbMiIHca1kl6aOmgNQcxCZJJdtfgt5bYetrue0RedFHWXULStGDbLTqUWqSDGv68Bf..; cq=ccp%3D1; _med=dw:1920&dh:1080&pw:1920&ph:1080&ist:0; pnm_cku822=098%23E1hvnvvUvbpvUvCkvvvvvjiPn2LZlj3WP25OQjthPmPOQjinRFLWtjtEPFdpljiniQhvCvvvpZptvpvhvvCvpvyCvhQvAqAGj70fdigXaZmOD46Od3ODNrBl5F%2FAdcwu%2BE7reTTJwyNZeb8rV8t%2Bm7zvdigM%2B3%2B%2BafmAdXKKNB3rl8gL%2BulQbfmxdBkK5FtfKphv8vvvpHwvvUmivvCH4pvv9fwvvhNjvvvmjvvvBGwvvUjuvvCH4pvv9x4EvpvV39CmpwLhuphvmvvvpLCzimdovphvC9mvphvvvvGCvvpvvPMM; res=scroll%3A1324*5419-client%3A1324*879-offset%3A1324*5419-screen%3A1920*1080; tk_trace=1; _tb_token_=58e58f774635d; cookie2=131f479ba88a52baff9dc2251421fe6e; csg=97afaf69; dnk=t_1478447548675_0; enc=4H74Y0r44SGPk5Wz56qVq1SNCjfXbNZIpUgAGnFvo%2BnuMbh8lla0QOPlfSDDwyumkwvmCu8w8l1oW%2FXR9F%2BX0g%3D%3D; lgc=t_1478447548675_0; lid=t_1478447548675_0; sgcookie=Eg58fDyEYk1ICwiZr1rwa; t=880253ed7dfa4bf082072960264a00fb; tracknick=t_1478447548675_0; uc1=cookie16=UIHiLt3xCS3yM2h4eKHS9lpEOw%3D%3D&cookie15=VFC%2FuZ9ayeYq2g%3D%3D&pas=0&cookie14=UoTUMtUJHXDCsg%3D%3D&cookie21=WqG3DMC9EdFmJgke4t0pDw%3D%3D&existShop=false; uc3=id2=UUpniZ1PwvL0Hg%3D%3D&nk2=F6k3HMWzu19fNT832586Rbk%3D&vt3=F8dBxGXNshiZNPQH4%2Bg%3D&lg2=V32FPkk%2Fw0dUvg%3D%3D; uc4=nk4=0%40FbMocpOBNkY7DhFu8FNFi1vK8W6a7WWqnAZhpQ%3D%3D&id4=0%40U2gtGPf5WP7MCXHzaAWz1AslnFcb; cna=kUI2F9A6ZnUCAW/Bcl/c+rlO",
        "Accept-Encoding":"br, gzip, deflate",
    }

    sleep(5)
    response  = requests.get(url=url,headers=headers)
    if response.status_code == 200:
        html = response.text
        save_data(html)


def save_data(html):

    datalist = etree.HTML(html)
    datas = datalist.xpath('//div[@class="product-iWrap"]')

    items = {}

    for data in datas:
        items['标题'] = data.xpath('./p[@class="productTitle"]/a/@title')
        items['价格'] = data.xpath('./p[@class="productPrice"]/em/@title')
        print(items)



if __name__ == '__main__':
    start_requests()

至此天猫爬虫程序分析完毕,整个过程还是相当顺利和简单的,只是我们要大胆地去尝试,不能因为某些人说阿里的反爬很强就退后不进啦,这是不对的;我们要勇于在困难中逆水而行。

你可能感兴趣的:(天猫爬虫程序分析)