爬取淘宝商品名称及价格

问题:使用request库和re库爬取淘宝网某种商品信息,并打印出其名称和价格
分析:
1.确定淘宝网搜索商品网址及robots协议
2.分析实现步骤:
A:使用request库爬取信息
B:使用re库查找信息-findall()函数
C:打印
3.明确实现难点:分页
在确定淘宝网搜索商品网址为:https://s.taobao.com/search?q=?后,通过手动翻页分析url,得知淘宝实现翻页功能是在url后增加id,每页展示固定商品数。
代码:

import requests
import re
import time

def getText(url):
    try:
        headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36'}
        r = requests.get(url, headers = headers, timeout = 30)
        time.sleep(1.5)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return  r.text
    except:
        return 'Failed!'

def parserPage(ilt, html):
    try:
        plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html)
        glt = re.findall(r'\"raw_title\"\:\".*?\"', html)
        for i in range(len(plt)):
            price = eval(plt[i].split(':')[1])
            goods_name = eval(glt[i].split(':')[1])
            ilt.append([price, goods_name])
    except:
        print('')

def printGoodslist(ilt):
    tplt = "{:<4}{:<8}{:>20}"
    print(tplt.format('序号','价格','商品名称'))
    count = 0
    for g in ilt:
        count += 1
        print(tplt.format(count, g[0], g[1]))

def main():
    goods = '书包'
    depth = 10
    start_url = 'https://s.taobao.com/search?q=' + goods
    infolist = []
    for i in range(depth):
        try:
            url = start_url + '&s='+str( 44 * i)
            html = getText(url)
            parserPage(infolist, html)
        except:
            continue
    printGoodslist(infolist)
main()

由于淘宝网robots协议禁止爬取根目录下任何信息,而本人操作仅为技术实现,并非恶意访问,因此在实现过程中,使用headers参数伪造user-agent信息,并使用time.sleep()方法模拟真实用户操作,以免被网站方禁止访问。
在最后main()函数打印中,自定义爬取深度(爬取页面数),使用string的加操作,拼接所有页面url。
re库使用范围非常广,还需要多加熟悉才行。

你可能感兴趣的:(python,爬虫)