IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫 -> 正文阅读

[人工智能]嵩天《Python网络爬虫与信息提取》实例3:淘宝商品比价定向爬虫

这一部分嵩天老师讲解的是对re库相关知识的应用,接下来将结合requests库一起对淘宝商品页面信息进行爬取。

说明:爬虫练习仅为学习,不做商用,如有侵权,烦请联系删除!

目标网页:淘宝搜索淘宝搜索是最智能的商品搜索引擎,通过大数据的运营,准确的理解商品与用户,提供精准的个性化搜索体验。https://s.taobao.com/

爬取目标:与淘宝网页搜索商品“拍立得”并打印商品名称和价格信息

相关库名:requests/re

目录

1.网页解析

2.代码设计

3. 运行结果

?

1.网页解析

打开网页版淘宝,并输入关键词“拍立得”,得到如下页面:

?观察其链接,可以看到关键词位于q值之后:

https://s.taobao.com/search?q=拍立得&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.jianhua.201856-taobao-item.1&ie=utf8

翻页之后得到如下链接,对比之后发现末尾多了s=44,同样方法得到第三页可以发现末尾是s=88,而每页商品数量恰好是44个,所以接下来将通过改变s值进行翻页:

https://s.taobao.com/search?q=拍立得&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.jianhua.201856-taobao-item.1&ie=utf8&s=44

鼠标右键点击查看页面源代码,快捷键ctrl+F调出搜索框输入页面第一件商品的价格499.00查看价格信息所在位置,可知价格放置在view_price键值对中,使用同样的方法复制商品名称发现名称信息放置在raw_title键值对中,所以要提取商品名称和价格信息,只需要检索到对应的键值对名称并把其后的值提取出来即可:

?

2.代码设计

完整代码如下,其实只在嵩天老师提供的源代码基础上增加了headers请求头信息,相关讲解见注释:

#实例:淘宝商品比价定价爬虫
import requests
import re

def getHTMLText(headers,url):
#定义获取网页源代码文本内容的函数
    try:
        r=requests.get(url,headers=headers,timeout=30)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except:
        print('获取网页信息失败')

def parsePage(ilt,html):
#定义解析页面信息的函数
    try:
        plt=re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)
        #匹配view_price及其后的价格信息并保存在列表plt中
        tlt=re.findall(r'\"raw_title\"\:\".*?\"',html)
        #匹配raw_title及其后的名称信息并保存在列表plt中
        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=2
    #指定爬取的页数
    start_url='https://s.taobao.com/search?q='+goods
    #给出初始链接
    infoList=[]
    #给出空列表用于存储商品信息
    headers = {
            'user-agent': '',       
            'cookie': ''
            }
    #输入自己的请求头身份信息
    for i in range(depth):
        try:
            print('正在处理第{}页信息'.format(i+1))
            url=start_url+'&s='+str(44*i)
            html=getHTMLText(headers,url)
            parsePage(infoList,html)
        except:
            print('获取信息失败')
    printGoodsList(infoList)

main()

?

3. 运行结果

运行代码后,IDLE页面结果显示如下:

由于设置了try-except,所以一开始有错误时总是只打印表头和空列表却不报错,一开始还以为是网页爬取的问题,觉得可能是淘宝的反爬机制无法通过只给定user-agentcookies破译,后面反复检查发现只是有一处拼写错误,这次吸取的教训就是,如果是练习的话,不设置try-except让它报错也无妨,这样纠正错误兴许还快一些。

参考资料:
嵩天. Python网络爬虫与信息提取[EB/OL].https://www.icourse163.org/course/BIT-1001870001.

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-01-04 13:26:12  更:2022-01-04 13:27:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 23:34:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码