古之成大事者,不惟有超士之才,亦唯有坚韧不拔之志

Python爬取淘宝商品信息

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

python版本:3.X

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

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

技术路线:requests – bs4 – re

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

《Python爬取淘宝商品信息》

分析链接:

首页链接会有【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 --*--
#抓取淘宝商品信息
# leif ```  站点 www.aotur.com
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编写。然后大家要理解每个定义函数的意思,并且理解这种分布分阶段的思维。我们看一下运行的结果:

《Python爬取淘宝商品信息》

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

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

微信公众号:匆匆闲暇
知乎专栏:匆匆闲暇
知乎链接:Python抓取淘宝商品信息

点赞
  1. 77说道:

    你好,爬取的数据还是和浏览器看到的不一样,有更好的方法吗?

发表评论

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