功能描述

  • 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格;
  • 理解:淘宝的搜索接口、翻页的处理;
    以课程中的搜索书包为例,对应的url如下:
    (1)起始页;
    (2)第二页:最后的s=44;
    (3)第三页:最后的s=88;
    可见每一个页面最后的s是44的倍数,对应每页显示44个商品;
  • 技术路线:requests-bs4-re;

程序的结构设计

  • 提交商品搜索请求,循环获取页面;
  • 对于每个页面,提取商品名称和价格等信息;
  • 将信息输出到屏幕上;

代码实现

  • 获取页面html文本
def getHTMLText(url):try:kv = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Mobile Safari/537.36 Edg/88.0.705.56','cookie':'t=deddd23bfe04ab15164c019112784f9c; cna=XK5LGA4m50ECAd9oJkUtgm7I; thw=cn; xlly_s=1; sgcookie=E10023Obh9wH5AWdx%2Fe7n3gl%2FZI8apXzKIErFStQ5NUCq3%2F9UYrF%2B7lI%2BN967STMEIBmunpgKuAgs%2B02R1E2Kb3%2Fkw%3D%3D; uc3=vt3=F8dCuAc7kVV3cGO6UpE%3D&lg2=V32FPkk%2Fw0dUvg%3D%3D&id2=UNDWqz%2BW1PBoCg%3D%3D&nk2=py2IFhkItJJhwQ%3D%3D; lgc=%5Cu817B%5Cu817Bninini; uc4=nk4=0%40pRuis6%2BJh76xIPKDeKEOvEm93LEw&id4=0%40UgcmAb1TDKQ0hqLa4CLaoKQH3sSr; tracknick=%5Cu817B%5Cu817Bninini; _cc_=VT5L2FSpdA%3D%3D; enc=b55neMOC4mLe80JhgcOCMv3RRT%2Bgd3Jr7BRuLm6yYbHBY8aIqO087t71RRsn5OJVY5LN5b14hUpuCT7xM55pmw%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=33_1; _m_h5_tk=7c2d3c2da0eba4f0ca62c06fcb13554f_1612439064793; _m_h5_tk_enc=927252cd80fc17adb09f49a138ecf921; _tb_token_=f350d8e59407; cookie2=1421470cd5225edfac39704d33d8a443; uc1=cookie14=Uoe1gB%2B9CAku%2Fg%3D%3D; JSESSIONID=E33478209544434CF08265F8EEE8CD73; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; l=eBEIV2fnjPZvYtyBBOfaourza779sIRbouPzaNbMiOCP_7fp5jscW6MM9K89CnGVh6xpR3r5KjjyBIBeqIv4n5U62j-la_Dqn; isg=BJ2dqTl0oSecwUULWgIzSNpErHmXutEMwxTFdV9i2_QjFrxIJwre3AiERAoQ0OnE; tfstk=cnZcBujlRruj-E3uRiibL7WzC6QRZC_qGlrz4ueHtAhmOXrPiQYy8Z9AEjBiEF1..'}r = requests.get(url, headers=kv, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:ptint("网页获取失败")
  • 注意:由于淘宝采取了反爬虫机制,所以我们可以先登录自己的账号后再来模仿浏览器进行访问爬取;
    登录后搜索“书包”,查看自己的cookie(按Fn+F12-网络-刷新页面-点击url-查找到cookie),复制粘贴到代码中,此处可参考查看网页的cookie和user-agent一文,如图所示:

    cookie比较容易失效,访问多次后就需要滑动验证,获取新的cookie并修改到代码中。
  • 对每一个页面进行解析
    可通过搜索对应的价格、商品名称、发货地址获取其位置,并可写出对应的正则表达式,如图所示:
def parsePage(ilt,html):try:re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')  # 编译商品价格正则表达式re2 = re.compile(r'\"raw_title\"\:\".*?\"')       # 编译商品名称正则表达式re3 = re.compile(r'\"item_loc\"\:\".*?\"')        # 编译商品位置正则表达式plt = re1.findall(html)tlt = re2.findall(html)llt = re3.findall(html)# plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) #将商品信息保存在plt中 "view_price":"134.00"# tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)      #最小匹配商品名称 "raw_title":"书包女韩版原宿ulzzang高中大学生背包大容"# llt = re.findall(r'\"item_loc\"\:\".*?\"', html)       #最小匹配商品地址 "item_loc":"江苏 连云港"for i in range(len(plt)):price = eval(plt[i].split(':')[1])     #以:为分隔符,只获得[1]位置的商品的价格数字title = eval(tlt[i].split(':')[1])     #以:为分隔符,只获得[1]位置的商品的名称location = eval(llt[i].split(':')[1])  # 以:为分隔符,只获得[1]位置的商品的位置ilt.append([price,location,title])     #将price和title存入ilt列表中except:print("网页解析失败")
  • 信息输出
def printGoodsList(ilt):try:tplt = "{0:4}\t{1:^8}\t{2:^12}\t{3:{4}^40}"   # 格式print(tplt.format("序号", "价格", "发货位置","商品名称",chr(12288)))  # 打印表头count = 0   # 计数器for g in ilt:count = count + 1print(tplt.format(count, g[0], g[1],g[2],chr(12288)))except:print("输出失败")
  • 注意:使用chr(12288)填充中文空格以保证表格的对齐;
    此处可参考Python 的 format 格式化输出一文;
  • 主函数
def main():goods = '书包'depth = 2   #爬取深度start_url = 'https://s.taobao.com/search?q=' + goodsinfoList = []for i in range(depth):try:url = start_url + '&s=' + str(44*i)    #构建不同页面的url链接html = getHTMLText(url)parsePage(infoList,html)except:continueprintGoodsList(infoList)
  • 总代码
import requests
import re#获得页面的函数
def getHTMLText(url):try:kv = {'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Mobile Safari/537.36 Edg/88.0.705.56','cookie':'t=deddd23bfe04ab15164c019112784f9c; cna=XK5LGA4m50ECAd9oJkUtgm7I; thw=cn; sgcookie=E10023Obh9wH5AWdx%2Fe7n3gl%2FZI8apXzKIErFStQ5NUCq3%2F9UYrF%2B7lI%2BN967STMEIBmunpgKuAgs%2B02R1E2Kb3%2Fkw%3D%3D; uc3=vt3=F8dCuAc7kVV3cGO6UpE%3D&lg2=V32FPkk%2Fw0dUvg%3D%3D&id2=UNDWqz%2BW1PBoCg%3D%3D&nk2=py2IFhkItJJhwQ%3D%3D; lgc=%5Cu817B%5Cu817Bninini; uc4=nk4=0%40pRuis6%2BJh76xIPKDeKEOvEm93LEw&id4=0%40UgcmAb1TDKQ0hqLa4CLaoKQH3sSr; tracknick=%5Cu817B%5Cu817Bninini; _cc_=VT5L2FSpdA%3D%3D; enc=b55neMOC4mLe80JhgcOCMv3RRT%2Bgd3Jr7BRuLm6yYbHBY8aIqO087t71RRsn5OJVY5LN5b14hUpuCT7xM55pmw%3D%3D; hng=CN%7Czh-CN%7CCNY%7C156; mt=ci=33_1; _m_h5_tk=aff79b9da27bfc34bf439ff14e19bd1c_1612686597552; _m_h5_tk_enc=df797590926f146a4442f321b1b38af9; xlly_s=1; _tb_token_=55eee656e7a35; cookie2=16e4068d824ad34232f28fd308e84bd5; uc1=cookie14=Uoe1gB37P0vuag%3D%3D; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; JSESSIONID=08B5DD09E5FA9256717C371A6AB7E949; l=eBEIV2fnjPZvYh-BBOfanurza77OSIRYouPzaNbMiOCP_ofH5x_fW6MhRjTMC3GRh6D9R3l29V7YBeYBq6fnnxv92j-la_kmn; tfstk=clohB3tMl2zBkbailHZI3vMikbYAayS0Gr4ZbchJsFFo7gc3Lsml7Z8Cp6P6Ihb5.; isg=BLq60wePjipC0wLCYTPs0QGlC-Dcaz5FzyGrdsSzZs0Yt1rxrPuOVYCNA0VrIbbd'}r = requests.get(url, headers=kv, timeout=30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:ptint("网页获取失败")#对每一个页面进行解析
def parsePage(ilt,html):try:re1 = re.compile(r'\"view_price\"\:\"[\d\.]*\"')  # 编译商品价格正则表达式re2 = re.compile(r'\"raw_title\"\:\".*?\"')       # 编译商品名称正则表达式re3 = re.compile(r'\"item_loc\"\:\".*?\"')        # 编译商品位置正则表达式plt = re1.findall(html)tlt = re2.findall(html)llt = re3.findall(html)# plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"', html) #将商品信息保存在plt中 "view_price":"134.00"# tlt = re.findall(r'\"raw_title\"\:\".*?\"', html)      #最小匹配商品名称 "raw_title":"书包女韩版原宿ulzzang高中大学生背包大容"# llt = re.findall(r'\"item_loc\"\:\".*?\"', html)       #最小匹配商品地址 "item_loc":"江苏 连云港"for i in range(len(plt)):price = eval(plt[i].split(':')[1])   #以:为分隔符,只获得[1]位置的商品的价格数字title = eval(tlt[i].split(':')[1])   #以:为分隔符,只获得[1]位置的商品的名称location = eval(llt[i].split(':')[1])   # 以:为分隔符,只获得[1]位置的商品的位置ilt.append([price,location,title])   #将price和title存入ilt列表中except:print("网页解析失败")#信息输出
def printGoodsList(ilt):try:tplt = "{0:4}\t{1:^8}\t{2:^12}\t{3:{4}^40}"  # 格式print(tplt.format("序号", "价格", "发货位置","商品名称",chr(12288)))  # 打印表头count = 0  # 计数器for g in ilt:count = count + 1print(tplt.format(count, g[0], g[1],g[2],chr(12288)))except:print("输出失败")#主函数
def main():goods = '书包'depth = 2     #爬取深度start_url = 'https://s.taobao.com/search?q=' + goodsinfoList = []for i in range(depth):try:url = start_url + '&s=' + str(44*i)      #构建不同页面的url链接html = getHTMLText(url)parsePage(infoList,html)except:continueprintGoodsList(infoList)if __name__ == '__main__':main()
  • 爬取结果
    所获得的信息显示出来了,如下所示:
序号      价格           发货位置                          商品名称                  1    179.00        广东 广州               mracehomme可爱手提日本双肩包女韩版大学生        2    699.00        福建 泉州           FILA斐乐童装男女童双肩包2020年冬季新款小学生书包初中儿童背包   3    379.00        福建 泉州           FILA斐乐男童女童书包小学生背包2020年秋冬季新款时尚儿童双肩包   4    39.80         河北 保定         ins书包女韩版原宿ulzzang高中大学生简约百搭2020新款双肩包背包  5    39.90         河北 保定          ins书包女韩版原宿ulzzang日系简约少女心学院风大学生双肩包背包   6    129.00        浙江 嘉兴           KK剑桥树书包小学生男孩一二三到六年级儿童6-12岁男童双肩包减负    7    288.00        广东 广州             欧洲站双肩包真皮男士背包旅游包时尚潮流大容量真皮书包电脑包      8    265.00          上海             书包女韩版高中双肩包2021新款百搭初中学生校园大容量背包电脑包    9    59.00           上海              双肩包男士大容量电脑旅行背包女时尚潮流大学生高中初中学生书包     10   299.00        江苏 无锡        CONVERSE匡威官方 Straight Edge休闲百搭双肩包实用书包1002113811  438.00        浙江 杭州           荷兰Backcare小学生书包一二三到六年级男孩女儿童减负护脊超轻便   12   148.00        广东 广州             旅行包男户外登山休闲超大容量旅游双肩书包出差背包女行李多功能     13   298.00          上海             牛津布双肩包女2020新款韩版百搭时尚学生书包大容量旅行背包小包    14   970.00        广东 深圳           Gaston Luga瑞典潮牌电脑双肩包男背包女大容量旅行包休闲书包   15   438.00        广东 广州           backcare书包小学生一二三四五六年级男女孩儿童轻便减负护脊减压   16   129.00        浙江 嘉兴           KK剑桥树书包小学生女孩一二三到六年级儿童双肩包护脊减负6-12岁    17   129.00        浙江 嘉兴           KK树书包小学生女孩6-12岁儿童一二三到六年级女童双肩包护脊减负    18   298.00        广东 广州             欧洲站双肩包真皮男士简约休闲时尚背包商务电脑旅行学生青年书包     19   253.00        福建 厦门             牛津布背包电脑双肩包男出差旅行包简约轻便潮流高中生大学生书包     20   69.00         湖南 邵阳            新款书包小学生女童一二三到六年级护脊儿童2020女孩韩版轻便减负    

到此,整个爬取就结束了。

淘宝商品比价定向爬虫-Python网络爬虫与信息提取-北京理工大学嵩天教授相关推荐

  1. Python爬虫实例之淘宝商品比价定向爬取!爬虫还是很有意思的!

    这次就模仿之前做的总结进行初次尝试 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格 理解:获取淘宝的搜索接口淘宝页面的翻页处理 技术路线:requests--re 准备工作 获取淘宝搜索商品的 ...

  2. Python网络爬虫与信息提取笔记08-实例2:淘宝商品比价定向爬虫

    Python网络爬虫与信息提取笔记01-Requests库入门 Python网络爬虫与信息提取笔记02-网络爬虫之"盗亦有道" Python网络爬虫与信息提取笔记03-Reques ...

  3. 网络爬虫与信息提取--正则表达式---淘宝商品比价定向爬虫

    淘宝商品比价定向爬虫 本实例爬取时间2019.9.11 由于淘宝代码的不断完善更新,本爬取代码已经不能爬取出商品信息内容 原因:结果为空:打印html看到,需要登录淘宝 在网上找解决方法,可以复制co ...

  4. python爬虫笔记(六)网络爬虫之实战(1)——淘宝商品比价定向爬虫(解决淘宝爬虫限制:使用cookies)...

    1.  淘宝商品信息定向爬虫 链接: https://www.taobao.com/ 2. 实例编写 2.1 整体框架 # -*- coding: utf-8 -*-import requests i ...

  5. 基于python的购物比价毕设_【Python爬虫】淘宝商品比价定向爬虫

    #CrowTaobaoPrice.py importrequestsimportredef getHTMLText(url):#获得网页信息 headers = {'User-Agent': 'Moz ...

  6. 优化淘宝商品比价定向爬虫--爬虫的浏览器伪装

    目录 一. 原代码问题 二.淘宝Robots协议 三.User-Agent 四.查找headers和cookie 五. 完整代码 一. 原代码问题 爬取不到任何内容处理 原因:由于淘宝的设置,虽然可以 ...

  7. 爬虫(6)—— 淘宝商品比价定向爬虫

    该实例来源于中国大学慕课,视频教学链接如下: 传送门 目标: 获取淘宝搜索页面的额信息,提取其中的商品名称和价格 关键点: 淘宝的搜索接口 翻页的处理 从以上图片中可以看出,搜索接口的形式是: htt ...

  8. python爬虫学习笔记(三)——淘宝商品比价实战(爬取成功)

    2020年最新淘宝商品比价定向爬取 功能描述 目标:获取淘宝搜索页面的信息,提取其中的商品名称和价格. 理解:淘宝的搜索接口 翻页的处理 技术路线:requests­          re 程序的结 ...

  9. Python 网络爬虫笔记8 -- 股票数据定向爬虫

    Python 网络爬虫笔记8 – 股票数据定向爬虫 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyth ...

最新文章

  1. JVM之内存结构图文详解
  2. esp8266 阿里云 arduino_ESP8266接入阿里云——基于官方SDK接入阿里云串口获取云下发数据...
  3. 使用Microsoft Unity进行日志记录
  4. 表单form数据默认以键值对的形式将数据回发到服务器,回发非纯文本需使用enctype=multipart/form-data方式编码为整条消息...
  5. [css][移动设备]禁止横竖屏时内容自动调整
  6. 配置数据引擎(BDE、SQL Link)的简单方法 /制做快速按钮条的方法/建立临时表的方法
  7. 信息系统项目管理06——项目进度管理
  8. Silverligth API for ArcGIS应用程序IIS发布
  9. 水经注地图下载器下载谷歌地图
  10. Nintendo Switch 解砖指引(翻译)
  11. 微信分享第三方网页链接自定义标题、描述、图片
  12. Google AdSense注册流程
  13. xaxis python_在python中绘制xaxis中的多列值
  14. 计算机指令包括哪2部分,机器指令分为哪几部分
  15. 音视频 | 音视频学习-01
  16. python中get函数是什么意思_详解python中get函数的用法(附代码)_后端开发
  17. 机器学习偏见可能会定义少数族裔的健康状况
  18. 【云栖大会】马云口中创造未来的年轻人,把数据+环保玩出了新花样
  19. 串口通信协议示例与分析
  20. 网站带不带www真的不一样,很多新手不知道区别会被坑死的

热门文章

  1. 联想笔记本如何安装内存条——附安装结果检查方法及问题解决方法
  2. 1.2 InSAR数据处理之软件介绍
  3. 计算机专业网名英语翻译,个性网-网名-各种英文网名带翻译*英文网名
  4. python的内存管理_Python深入06 Python的内存管理
  5. 【洛谷P5514】永夜的报应【模拟】
  6. 樊登读书会终身成长读后感_《终身成长》读后感三篇
  7. 如何充分利用开源项目_充分利用最好的5个开源转移学习项目来增强您的项目...
  8. python设计模式篇3---创建型模式
  9. TiDB HTAP 深度解读
  10. 6-2 返回月份的英文全称(日历) (10分) java pta