Python爬取淘宝商品信息 | 奇点产品

/ 0评 / 0

最近有一点时间没有更新了,主要是忙着工作和学习新知识了。今天,我们就来说说,利用python抓取淘宝商品信息。

python版本:3.X

抓取淘宝商品信息之前,我们先来规划下这次操作的流程:

目标:获取淘宝页面搜索信息,提取其中的价格和商品名称,并输出

技术路线:requests - bs4 - re

比如我们搜索一个关键词“裙子”,得到以下结果:

分析链接:

首页链接会有【search?q=裙子】字样,链接尾部有44,88的翻页数,分析得出,淘宝一页44个商品。

然后看一下淘宝是否允许爬,访问域名+robots.txt 可以看到,淘宝是不允许的,但是,通过某些技术,还是可以实现。

我们先写一个main()函数

def main(): 
    goods = '裙子' 
    depth = 3 
    start_url = 'https://s.taobao.com/search?q=' + goods 
    infoList = [] 
    for i in range(depth): 
        try: 
            url = start_url + '&s=' + str(44 * i) 
            html = getHTMLText(url) 
            parsePage(infoList, html) 
        except: 
            continue 
            printGoodsList(infoList)

getHtmlTest()函数,获取html文本

def getHTMLText(url): 
    try: 
        r = requests.get(url, timeout=30) 
        r.raise_for_status() 
        r.encoding = r.apparent_encoding 
        return r.text 
    except: 
        return ""

在写一个parsePage()分析页面函数

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("")

最后是打印函数 printGoodList()

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]))好了,代码都完成了,我们整理出全部代码:
#--*-- coding:utf-8 --*-- 
# #抓取淘宝商品信息 
import requests 
import re 

def getHTMLText(url): 
    try: 
        r = requests.get(url, timeout=30) 
        r.raise_for_status() 
        r.encoding = r.apparent_encoding 
        return r.text 
    except: 
        return "" 
        
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("") 
        
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])) 
        
def main(): 
    goods = '裙子' 
    depth = 3 
    start_url = 'https://s.taobao.com/search?q=' + goods 
    infoList = [] 
    for i in range(depth): 
        try: 
            url = start_url + '&s=' + str(44 * i) 
            html = getHTMLText(url) 
            parsePage(infoList, html) 
        except: 
            continue 
            printGoodsList(infoList) 
main()
            
    

 

本次代码在开始就已经说了,是基于python3.x编写。然后大家要理解每个定义函数的意思,并且理解这种分布分阶段的思维。我们看一下运行的结果:

好,这里的结果和我们要的已经保持一致了。

最后,推荐大家一个学习网站,icourse163.org/


微信公众号:奇点产品

发表评论

电子邮件地址不会被公开。 必填项已用*标注