基于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.输出结果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值