文章目录

  • 写在前面
  • 一、爬取原页面
  • 二、编程思路
    • 1.功能描述
    • 2.程序的结构设计
  • 三、编程过程
    • 1.解决翻页问题
    • 2.编写getHTMLText()函数
    • 3.编写parsePage()函数
      • (1).内容解析编程思路
      • (2).函数代码
    • 4.编写printGoodsList()
  • 四、完整代码
  • 引用源自

写在前面

  这个例子是笔者今天在中国大学MOOC(嵩天 北京理工大学)上学习的时候写下来的。但是很快写完之后我就发现不对劲,因为照着老师的代码写完后运行并不能爬取到信息,经过我的一番折腾,基本解决了问题,并且做了一些优化,写这篇博客记录一下,下图是最终的爬取结果。

一、爬取原页面

  爬取页面为淘宝网站,以女装为例,原图如下,由于淘宝商品排名实时更新,所以爬取结果顺序与网站顺序可能会存在不同。本实例爬取的内容为商品的价格和名称,并为其添加序号。

二、编程思路

  这一部分嵩天老师在课中给出了讲解,这里我整理分享给大家。

1.功能描述

目标:获取淘宝搜索页面的信息,提取其中的名称和价格。

理解:
(1).获得淘宝的搜索接口
(2).对翻页的处理

技术路线:requests-re

2.程序的结构设计

步骤一:提交商品搜索请求,循环获取页面
步骤二:对于每个页面,提取商品名称和价格信息
步骤三:将信息输出到屏幕上

对应上述三个步骤分别定义三个函数:

(1)getHTMLText()获得页面
(2)parsePage()对每一个获得的页面进行解析
(3)printGoodsList()将商品的信息输出到屏幕上

三、编程过程

1.解决翻页问题

  首先我们来看一下前三页分别的URL


  对淘宝每一页商品数量的观察我们可以发现,每一页有44个商品,结合上面的结果我们可以猜测,变量s表示的是第二页,第三页…页的起始商品的编号。基于这种规则,我们就可以构建不同页的URL链接。

代码如下:

for i in range(depth):#对每次翻页后的URL链接进行设计url = start_url + '&s='+str(44*i)html = getHTMLText(url)parsePage(infoList,html)

2.编写getHTMLText()函数

def getHTMLText(url):#获得页面try:kv = {'user-agent': 'Mozilla/5.0','cookie':' '#请自行获取}r = requests.get(url,headers=kv,timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("获取页面失败")

关于cookie的获取方法,可以参考我的这篇博客
链接: https://blog.csdn.net/weixin_44578172/article/details/109353017.

3.编写parsePage()函数

(1).内容解析编程思路

  首先查看女装搜索结果页面的源代码

  通过对源代码的观察我们发现,淘宝中所有商品的价格和名称是存在相应的键值对中的即:“view_price”:“价格”,“view_title”:“名称”。所以我们想要获得这两个信息,只需要在获得的文本中检索到view_price和view_title并把后续的相关内容提取出来即可,这里采用正则表达式的方法。

(2).函数代码

def parsePage(ilt,html):#对每一个获得的页面进行解析
#两个变量分别是结果的列表类型和相关的HTML页面的信息try:re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')#编译商品价格正则表达式re2 = re.compile(r'\"raw_title\"\:\".*?\"')#编译商品名称正则表达式plt = re1.findall(html)tlt = re2.findall(html)#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])#去掉view_price字段,只要价格部分,eval将获取到的最外层/内层的单引号或双引号去掉title = eval(tlt[i].split(':')[1])#去掉raw_title字段,只要名称部分ilt.append([price,title])except:print("网页解析失败")

4.编写printGoodsList()

def printGoodsList(ilt):#将商品的信息输出到屏幕上try:tplt = "{:4}\t{:8}\t{:16}" #定义打印模板print(tplt.format("序号","价格","商品名称"))count = 0for s in ilt:count = count + 1print(tplt.format(count,s[0],s[1]))except:print("输出失败")

四、完整代码

'''
功能描述目标:获取淘宝搜索页面的信息,提取其中的名称和价格。理解:
1.获得淘宝的搜索接口
2.对翻页的处理技术路线:requests-re程序的结构设计
步骤1:提交商品搜索请求,循环获取页面
步骤2:对于每个页面,提取商品名称和价格信息
步骤3:将信息输出到屏幕上
'''
import requests
import redef getHTMLText(url):#获得页面try:kv = {'user-agent': 'Mozilla/5.0','cookie':' '#请自行获取}r = requests.get(url,headers=kv,timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:print("获取页面失败")def parsePage(ilt,html):#对每一个获得的页面进行解析
#两个变量分别是结果的列表类型和相关的HTML页面的信息try:re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')#编译商品价格正则表达式re2 = re.compile(r'\"raw_title\"\:\".*?\"')#编译商品名称正则表达式plt = re1.findall(html)tlt = re2.findall(html)#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])#去掉view_price字段,只要价格部分,eval将获取到的最外层/内层的单引号或双引号去掉title = eval(tlt[i].split(':')[1])#去掉raw_title字段,只要名称部分ilt.append([price,title])except:print("网页解析失败")def printGoodsList(ilt):#将商品的信息输出到屏幕上try:tplt = "{:4}\t{:8}\t{:16}" #定义打印模板print(tplt.format("序号","价格","商品名称"))count = 0for s in ilt:count = count + 1print(tplt.format(count,s[0],s[1]))except:print("输出失败")def main():goods = input("请输入想要搜索的商品:") #定义搜索关键词变量depth = input("请输入想要搜索商品的深度(整数):") #定义爬取的深度即页数depth = int(depth)start_url = 'https://s.taobao.com/search?q='+goodsinfoList = [] #定义整个的输出结果变量for i in range(depth):#对每次翻页后的URL链接进行设计try:url = start_url + '&s='+str(44*i)html = getHTMLText(url)parsePage(infoList,html)except:continueprintGoodsList(infoList)#调用主函数
main()

  本篇完,如有错误欢迎指出~

引用源自

中国大学MOOC Python网络爬虫与信息提取
https://www.icourse163.org/course/BIT-1001870001

Python爬虫入门实例五之淘宝商品信息定向爬取(优化版)相关推荐

  1. python爬取淘宝商品信息_python爬取淘宝商品信息并加入购物车

    先说一下最终要达到的效果:谷歌浏览器登陆淘宝后,运行python项目,将任意任意淘宝商品的链接传入,并手动选择商品属性,输出其价格与剩余库存,然后选择购买数,自动加入购物车. 在开始爬取淘宝链接之前, ...

  2. Python爬虫学习笔记(实例:淘宝商品信息定向爬虫)

    淘宝商品信息定向爬虫先贴代码,后看解析: #淘宝商品信息定向爬虫 import requests import re#获得页面 def getHTMLText(url):try:#headers = ...

  3. 中国大学MOOC“淘宝商品信息定向爬虫”实例(2022版)

    目标: 获取淘宝搜索页面的信息 提取其中的商品名称和价格 (一)程序的结构设计: 1:提交商品搜索请求,循环获取页面 2:对于每个页面,提取商品名称和价格信息 3:将信息输出到屏幕上 (二)代码实现: ...

  4. 淘宝商品信息定向爬虫

    只用来学习请勿无限制使用爬虫 功能描述 目标:获取淘宝搜索页面的信息媒体去其中的商品名称和价格 程序的结构设计 步骤1:提交商品搜索请求,循环获取页面 步骤2:对每个页面,提取商品名称和价格信息 步骤 ...

  5. python爬虫教程(五):解析库bs4及爬取实例

    大家好,今天分享的是解析库中的bs4,本文章的目的是让你知道如何使用bs4,并且附带爬取实例. 目录 一.bs4简介 二.安装及初始印象 1.安装 2.解析器 3.初始印象 三.选择元素的方法 1.方 ...

  6. 淘宝商品信息定向爬虫实例

    1.说明 获得淘宝的搜索接口 淘宝搜索页面不允许爬虫爬取 不要不加限制的爬取次网站 2.代码 import re import requestsdef getHTMLText(url):try:hea ...

  7. python爬淘宝的退货信息_Python——淘宝商品信息定向爬虫(requests+re)

    有点崩,现在好像爬取不到任何东西了 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格 理解: 1.怎样去通过程序向淘宝提交请求,并获得提取的结果 2.怎样展示翻页的处理 首先我们要查看淘宝网的r ...

  8. Python爬虫入门教程 4-100 美空网未登录图片爬取

    简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可以了,或者带带我也行. ...

  9. Python爬虫入门教程 4-100 美空网未登录图片爬取 1

    简介 上一篇写的时间有点长了,接下来继续把美空网的爬虫写完,这套教程中编写的爬虫在实际的工作中可能并不能给你增加多少有价值的技术点,因为它只是一套入门的教程,老鸟你自动绕过就可以了,或者带带我也行. ...

最新文章

  1. ON、WHERE、HAVING的区别
  2. 创新课程管理系统数据库设计心得
  3. 【Boost】boost库中function的用法
  4. 又拍云张聪谈安全、HTTPS、自定义、CDN的未来趋势
  5. 一文说通Dotnet Core的后台任务
  6. 使用Qt生成第一个窗口程序
  7. centos7 kvm虚拟机安装黑屏
  8. 计算机未来发展展望3000字,关于我的计算机职业生涯规划3000字
  9. 格力不需要“第二个董明珠”
  10. 过程控制第四章到第六章
  11. 【每天更新】2022年最新WordPress主题下载(2022-5-12)
  12. Python3 + selenium 实现QQ群接龙自动化
  13. 小猪猪的matlab学习笔记
  14. 【实验四 循环结构】7-5 sdut-C语言实验- 做乘法
  15. netgear 网件路由器怎么了
  16. 已解决Could not install packages due to an EnvirommentError:[WinError 5]拒绝访问。:‘c: [programdata | lanaco
  17. 设计模式之举例说 设计原则
  18. xmms乱码解决方法
  19. 基于RT-Thread OS的 迷你时钟项目
  20. 网站做好后不能用手机浏览吗_企业的网站建设如何跟上时代的发展?

热门文章

  1. ESRVCC介绍及优化
  2. Tomcat开发Web站点
  3. python爬虫解决赶集网扫码获取手机号
  4. CCTalk网课批量自动下载工具
  5. 【阿里云IoT+YF3300】14.阿里IoT Studio打造手机端APP
  6. win7 mac虚拟机linux,小白练习win7系统在虚拟机下装mac的具体方案
  7. 基于51单片机的音乐彩灯
  8. 计算机中成绩等级排名的函数怎么写,计算机二级excel函数总结(第一篇)
  9. 全国电大计算机英语统考难不难,电大英语统考的难度系数怎么样是不是很大
  10. 多张图片怎么合成gif?