博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【爬虫实战】7基础Python网络爬虫——淘宝商品比价定向爬虫(MOOC学习笔记)
阅读量:3917 次
发布时间:2019-05-23

本文共 6405 字,大约阅读时间需要 21 分钟。

淘宝商品比价定向爬虫

1、“淘宝商品比价定向爬虫”实例介绍

https://www.taobao.com/

(1)功能描述

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

理解: 淘宝的搜索接口、翻页的处理
技术路线:requests‐bs4‐re

在淘宝中搜索书包:

起始页
https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306
第二页
https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=3&ntoffset=3&p4ppushleft=1%2C48&s=44
第三页
https://s.taobao.com/search?q=%E4%B9%A6%E5%8C%85&imgfile=&commend=all&ssid=s5-e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=0&ntoffset=6&p4ppushleft=1%2C48&s=88

每页44个商品

搜索接口和翻页的URL对应属性

(2)定向爬虫可行性

https://s.taobao.com/robots.txt

User‐agent: *  Disallow: /

请注意:这个例子仅探讨技术实现,请不要不加限制的爬取该网站

(3)程序的结构设计

步骤1:提交商品搜索请求,循环获取页面

步骤2:对于每个页面,提取商品名称和价格信息
步骤3:将信息输出到屏幕上

2、“淘宝商品比价定向爬虫”实例编写

F12先看看网页源代码:

在这里插入图片描述
每页有44个数据,具体点开,其中的属性如下所示:
在这里插入图片描述
更正,看视频应该是直接右键,查看源代码,在view_price里面是价钱。

问题1:爬取错误,需要登陆

显示“淘、我喜欢……”,网上有一些方法,参考,这个方法试了不行,参考和,就是要加上Headers和Cookie就行了,获取就是F12谷歌浏览器获取

问题2:爬取失败

这个是cookie,不是cookies,注意

'cookie': 'cna=4EY9GBCGi24CAX0hoxPCSh3o; lgc=tb016326075; tracknick=tb016326075; enc=vAQP3%2BDiMCsmpBTPzOYmEIf8ck2VCf7vC7nkQZ8%2FaWvOxPgNQ%2Bq9Tqk7CeUAsuxbNycLP1m34NetTpzAHUGLY6%2BIoDKIGwerwubCYx%2BRGgU%3D; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; miid=2129683386431328771; uc3=nk2=F5RFgYsblJqh%2Fxg%3D&lg2=URm48syIIVrSKA%3D%3D&id2=UUphyu%2BMQePK3ZcJpg%3D%3D&vt3=F8dCuAAj3fWCuQmoFRA%3D; sgcookie=E1001PKHlEpHPIwgZdgXqmuN4zNC5c2rLh0ZZl2qrrU2tpqYBo4DeiGoYkBtV2vrW8la5C5mno3THPQIol2aGJP%2B1g%3D%3D; uc4=id4=0%40U2grEanNorSHEVC%2FCJPnu1dyk6%2Fm%2Blb%2B&nk4=0%40FY4O6GMel1dzoUGz33V%2BnooVPIKaeQ%3D%3D; _cc_=V32FPkk%2Fhw%3D%3D; mt=ci=-1_0; t=d6a7916c433234b48b3736ab03124eb3; _tb_token_=ebb07d739b617; _m_h5_tk=1552cdc6833858830d8b3ce0002ff6a3_1610964559834; _m_h5_tk_enc=e17584be300f3e8c02a520783ff33afe; xlly_s=1; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; cookie2=1b2930486c1a521557fda231d6bea006; uc1=cookie14=Uoe1gqFMHiHajw%3D%3D; l=eBxIxLbROluIR8QEBO5Zhurza77T3IOfGsPzaNbMiInca6OF6e2h0NCINVIeJdtjgtCXhetyAv1yVdHyJNUKg2HvCbKrCyCuQxJO.; tfstk=c2jFB009-kEFUAx7kHtrO0JWacndaWRkGcJ2-aCGJq4z1mTpgsfSwdqLJdJyMlYh.; isg=BNLSjHOo5mgFdCUsNcrbgSaEI5i049Z9mBe_c5wq5AVJr3aphHPPjYYNHwuT304V; JSESSIONID=2D6B9CE4E9E5A60BCE2129936E482C77'}

这个是headers,不是header,注意

r = requests.get(url, headers=kv, timeout=30)

以上两个地方卡了我好久,解决完之后就能模拟浏览器进行免登录了

问题3:第一页爬取有时失败

try没进去,直接就进到except里头了。解决办法:多试几次。或者尝试不加timeout,但把timeout去了第二页又出不来了……这个问题有点玄学

以及第一面的view_price个数有时是44,有时是48,在浏览器里面直接数也是的

关于eval() 函数,是用来执行一个字符串表达式,并返回表达式的值,用法如下:

>>>x = 7>>> eval( '3 * x' )21>>> eval('pow(2,2)')4>>> eval('2 + 2')4>>> n=81>>> eval("n + 4")85

代码如下:

import requestsimport redef getHTMLText(url):    try:        kv = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36', 'cookie': 'cna=4EY9GBCGi24CAX0hoxPCSh3o; lgc=tb016326075; tracknick=tb016326075; enc=vAQP3%2BDiMCsmpBTPzOYmEIf8ck2VCf7vC7nkQZ8%2FaWvOxPgNQ%2Bq9Tqk7CeUAsuxbNycLP1m34NetTpzAHUGLY6%2BIoDKIGwerwubCYx%2BRGgU%3D; thw=cn; hng=CN%7Czh-CN%7CCNY%7C156; miid=2129683386431328771; uc3=nk2=F5RFgYsblJqh%2Fxg%3D&lg2=URm48syIIVrSKA%3D%3D&id2=UUphyu%2BMQePK3ZcJpg%3D%3D&vt3=F8dCuAAj3fWCuQmoFRA%3D; sgcookie=E1001PKHlEpHPIwgZdgXqmuN4zNC5c2rLh0ZZl2qrrU2tpqYBo4DeiGoYkBtV2vrW8la5C5mno3THPQIol2aGJP%2B1g%3D%3D; uc4=id4=0%40U2grEanNorSHEVC%2FCJPnu1dyk6%2Fm%2Blb%2B&nk4=0%40FY4O6GMel1dzoUGz33V%2BnooVPIKaeQ%3D%3D; _cc_=V32FPkk%2Fhw%3D%3D; mt=ci=-1_0; t=d6a7916c433234b48b3736ab03124eb3; _tb_token_=ebb07d739b617; _m_h5_tk=1552cdc6833858830d8b3ce0002ff6a3_1610964559834; _m_h5_tk_enc=e17584be300f3e8c02a520783ff33afe; xlly_s=1; alitrackid=www.taobao.com; lastalitrackid=www.taobao.com; cookie2=1b2930486c1a521557fda231d6bea006; uc1=cookie14=Uoe1gqFMHiHajw%3D%3D; l=eBxIxLbROluIR8QEBO5Zhurza77T3IOfGsPzaNbMiInca6OF6e2h0NCINVIeJdtjgtCXhetyAv1yVdHyJNUKg2HvCbKrCyCuQxJO.; tfstk=c2jFB009-kEFUAx7kHtrO0JWacndaWRkGcJ2-aCGJq4z1mTpgsfSwdqLJdJyMlYh.; isg=BNLSjHOo5mgFdCUsNcrbgSaEI5i049Z9mBe_c5wq5AVJr3aphHPPjYYNHwuT304V; JSESSIONID=2D6B9CE4E9E5A60BCE2129936E482C77'} r = requests.get(url, headers=kv, timeout=30) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print('Error:获取失败')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('Error!')def printGoodsList(ilt): tplt = '{:4}\t{:8}\t{:16}' print(tplt.format('序号','价格','商品名称')) count = 0 for g in ilt: 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 = [] for i in range(depth): try: url = start_url + '&s=' + str(44 * i) html = getHTMLText(url) parsePage(infolist, html) except: continue printGoodsList(infolist)if __name__ == '__main__': main()

结果如下所示(共92条,仅显示前20条):

序号  	价格      	商品名称               1	790.00  	kipling女款背包2020年新款时尚企鹅包书包   2	169.00  	Puma彪马男女包2020夏季新款高中大学生书包运动双肩包背包076703   3	229.00  	Adidas阿迪达斯背包男包女包2020新款运动包学生书包双肩包FS8342   4	666.00  	国家地理Cordura户外双肩包潮学生书包休闲背包德国杜邦面料防水   5	279.00  	National Geographic国家地理双肩包学生书包时尚旅行情侣背包ins   6	149.00  	鳄鱼男士双肩包商务休闲电脑背包大容量旅行时尚潮流初中学生书包   7	458.00  	backcare小学生书包儿童一二三到六年级男女孩超轻便减负护脊背包   8	198.00  	瑞士军刀双肩包男休闲大容量书包瑞士军士刀男士电脑商务旅行背包   9	419.00  	UNIKER初高中小学生拉杆书包可爬楼梯大轮子30升男女孩儿童拉杆包  10	318.00  	欧洲站男士双肩包时尚潮流真皮背包电脑包休闲旅行大容量书包男包  11	438.00  	荷兰Backcare小学生书包一二三到六年级男孩女儿童减负护脊超轻便  12	298.00  	牛津布双肩包女2020新款韩版百搭时尚学生书包大容量旅行背包小包  13	59.00   	大容量男士双肩包休闲旅行电脑背包时尚潮流女初中学生书包大学生  14	289.00  	欧洲站双肩包真皮男旅游包时尚男士背包大容量真皮包包学生书包  15	288.00  	欧洲站男士真皮双肩包旅行背包时尚潮流书包韩版商务大容量电脑包  16	99.00   	南极人小学生书包女日本一二三到六年级护脊减负儿童双肩背包轻便  17	169.00  	双肩包男士包包多功能商务17寸电脑包休闲书包大容量出差旅行背包  18	299.00  	BOPAI博牌电脑背包男户外旅行休闲双肩包大学生书包商务功能男包  19	229.00  	牛津大学书包小学生一三到六年级男童减负学生包女护脊儿童二四五  20	59.00   	双肩包男士大容量电脑旅行背包女时尚潮流大学生高中初中学生书包

3、小结

采用requests‐re路线实现了淘宝商品比价定向爬虫,熟练掌握正则表达式在信息提取方面的应用

转载地址:http://igvrn.baihongyu.com/

你可能感兴趣的文章
调试实战 | 通过转储文件分析程序无响应之使用 windbg + IDA 逆向篇
查看>>
如何在 C# 中使用 委托
查看>>
Abp vNext 后台作业hangfire
查看>>
【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷&汪宇杰&文轩
查看>>
Dotnet Core多版本API共存的优雅实现
查看>>
如何在 ASP.NET Core Web API 中以三种方式返回数据
查看>>
开源项目葫芦藤:IdentityServer4的实现及其运用
查看>>
Abp vNext异常处理的缺陷/改造方案
查看>>
目录 | 数据结构与剑指Offer系列推文合集
查看>>
在 Windows 服务中托管 ASP.NET Core
查看>>
新鲜高频笔面试题分享,Redis、MongoDB、ElasticSearch...
查看>>
如何在 C# 中使用 const,readonly,static
查看>>
[Stardust]星尘分布式全链路监控
查看>>
.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号
查看>>
如何在 C# 中使用 Buffer
查看>>
大学班里80%都去培训班,为什么我没去
查看>>
Beetlex之websocket/tls服务压测工具
查看>>
Abp小试牛刀之 图片上传
查看>>
使用Select.HtmlToPdf 把html内容生成pdf文件
查看>>
叮咚!你有一份来自明源云的圣诞邀约
查看>>