基于request+re路线的淘宝商品信息的定向爬虫

python爬虫实例讲解

1.爬取网页

通过导入request,re库,首先编写一个将淘宝商品页爬取的函数,此时一个注意点是要将自己头部的user agent伪装成浏览器(淘宝会拒绝爬虫请求),并且采用设计好的cookie,放入request.get的参数中,返回网页信息。`

import requests
import re
def get_html_text(url):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}   #爬虫头部伪装成浏览器头部,方便get到url
    try:
        coo = 't=85db5e7cb0133f23f29f98c7d6955615; cna=3uklFEhvXUoCAd9H6ovaVLTG; isg=BM3NGT0Oqmp6Mg4qfcGPnvDY3-pNqzF2joji8w9SGWTYBu241_taTS6UdFrF3Rk0; miid=983575671563913813; thw=cn; um=535523100CBE37C36EEFF761CFAC96BC4CD04CD48E6631C3112393F438E181DF6B34171FDA66B2C2CD43AD3E795C914C34A100CE538767508DAD6914FD9E61CE; _cc_=W5iHLLyFfA%3D%3D; tg=0; enc=oRI1V9aX5p%2BnPbULesXvnR%2BUwIh9CHIuErw0qljnmbKe0Ecu1Gxwa4C4%2FzONeGVH9StU4Isw64KTx9EHQEhI2g%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=0_0; hibext_instdsigdipv2=1; JSESSIONID=EC33B48CDDBA7F11577AA9FEB44F0DF3'
        cookies = {}
        for line in coo.split(';'):  # 浏览器伪装 同样是为了成功爬取页面
            name, value = line.strip().split('=', 1)
            cookies[name] = value
        r = requests.get(url, cookies=cookies, headers=headers, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ''

2. 正确获得我们需要的信息(爬虫关键

我们通过观察网页源代码找到商品与价格位于view price和raw title之后,利用导入的re库我们使用正则表达式表示出我们想要爬取的部分,再用split函数去掉列表前面的定位词(view price,raw title),并用appen函数讲列表两个元素商品和价格封装好。

def parsePage(ilt,html):
    try:
        plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)  #观察源代码找到商品名称以及价格所在地,设计出正则表达式提取出商品名称以及价格。
        tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)
        for i in range(len(plt)):
            price=eval(plt[i].split(":")[1])
            title=eval(tlt[i].split(":")[1])
            ilt.append([price,title])
    except:
        print("")

3.调用输出函数以及编写主函数

输出时候我们先设计个美观的表格格式tplt,然后以他为format进行输出,通过count给他加上序号。主函数很简单,调用上面编写的函数即可。
注意:url翻页功能的实现就是观察淘宝翻页时候url的变化来编写翻页的小循环,depth代表翻的页数,44是淘宝每个页面呈现的商品数量,第一页s=0,第二页s=44,以此类推,这里仅爬了前两页。

def printGoodsList(ilt):
    tplt = "{:4}\t{:8}\t{:16}"                   #设计表格长度
    print(tplt.format("序号","价格","商品名称"))
    count=0
    for g in ilt:
        count=count+1
        print(tplt.format(count,g[0],g[1]))
    print("")
def main():
    goods="书包"
    depth=2
    start_url="https://s.taobao.com/search?q="+goods
    info_list = []
    for i in range(depth):
        try:
            url = start_url + '&s=' + str(44 * i)  # 44是淘宝每个页面呈现的宝贝数量
            html = get_html_text(url)
            parsePage(info_list, html)
        except:
            continue
    printGoodsList(info_list)


main()

4.输出结果

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。