当前位置:网站首页>躲避雪糕刺客?通过爬虫爬取雪糕价格
躲避雪糕刺客?通过爬虫爬取雪糕价格
2022-07-30 17:35:00 【m0_54850825】
需求分析
夏天天气实在是太热了,热的让人不想动,只有一直呆在空调房里,才能带来一点点安慰。当然,也少不了吃雪糕
不过,现在的雪糕的价格也不便宜,比如说某爱多巧克力雪糕零售已经卖到5块钱了,我怎么记得以前才3块呢,总之呢,这个价格有点小贵。然而没想到的是,今天有一个小伙伴突然和我说,“,今天我上当了,我在便利店拿了一支中雪糕,没想到,居然要收我16块钱!我被雪糕刺客袭击了!”
中雪糕?16块钱?哦天啊,我问他,“那这个这么贵,你怎么不放回去呢?这都可以吃3个多的某爱多了啊?“
小伙伴很无奈,”拿都拿了,已经要结账了,我不好意思放回去啊……”
唉,这恐怕就是死要面死活受罪吧,怎么办呢?有没有办法帮帮小伙伴,避免下次再拿到高价雪糕了呢?当然,已经有很多大佬做了秘籍,比如说进口的雪糕比较贵,带有某种巧克力的雪糕比较贵等等,不过这些规则太复杂了,不够直接,我们应该采取一个更快的办法,直接把雪糕的价格爬取下来,这样就能看出哪种雪糕的价格比较贵了
实现分析
这个需求不是很困难,就是爬取雪糕价格嘛,只要找到一家商店,然后将雪糕的名字和价格保存下来就可以了。我也是很容易就找到了一个目标,并且通过requests发送了请求
不出意外的话是又出意外了,那就是,怎么在请求里没有看到数据呢?就像这样

可以看出,这个金钱符号的后边,应该就是价格了,可是这里却看不到价格,这可真是奇了怪了,价格哪里去了呢?明明在页面上有价格,怎么到了我们的requests里就没有价格了呢?这到底是怎么一回事呢?
好吧,那就只能找一找了,其实呢也不困难,如果我没猜错的话,我想我已经找到价格了

可以看出,价格就在这个请求里,上边有一个p就是价格,应该是price之类的吧,那这是什么呢?这是一个jquery文件,也就是说,雪糕的价格在页面里是通过jquery写进去的。在requests发送的基本请求中是看不到的
好吧,那就基本上确定了,不用想,今天又是得用selenium了。可能会有小伙伴非常不理解,不就是一个jquery文件吗,我们把这个文件爬取下来,然后解析不就行了吗,为什么非得用selenium呢?
这样想是没错,不过想根据页面确定对应的jquery文件,期间可能还需要经过一次加密参数的检验,想想也知道在这上面和它耗太费时间。如果没有什么特殊的需求的话,肯定是直接用selenium了,使用方法也很简单,打开一个浏览器,然后获取页面,通过driver.page_source获取页面的代码,就可以当作正常的requests请求获取到的响应使用了
完整代码演示
from selenium import webdriver
from lxml import etree
from base64 import b64decode
url = b64decode("aHR0cHM6Ly93d3cuamQuY29tL3BoYi8xMjIxODU1MTY0MzIxMmY1MDE5NTkuaHRtbA==").decode()
driver = webdriver.Chrome()
driver.get(url)
html = etree.HTML(driver.page_source)
driver.quit()
i_name = html.xpath("//div[@class='detail']/a/text()")
i_price = html.xpath("//span[@class='price-rmb']/text()")
i_comment = html.xpath("//div[@class='evaluate-detail']/a/text()")
text = ""
for i in range(len(i_name)):
text += "名称:" + i_name[i] + "
"
text += "价格:" + i_price[i] + "元
"
text += "热评:" + i_comment[i] + "
"
print(text)
程序的运行结果如下所示

总的来说,如果你遇到了一个需要动态渲染的页面,或者说是需要执行js的页面,如果没有特殊的需求的话,比如说需要执行速度快,或者你愿意付出很高的成本去升级程序,否则的话,建议还是直接使用动态渲染的应用会比较好,例如selenium的使用
另外,还可以看出这个程序由于选择的页面一般,所以并不能够直接算出雪糕的单价,因为很难提取出雪糕的数量,如果要解决这一问题,最好换一个更好一些的商品页面
边栏推荐
猜你喜欢

weiit新零售小程序如何探索数字化门店的破局之路

Promise entry to proficient (1.5w word detailed explanation)

论文阅读之《Color Constancy Using CNNs》

ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法

olap——入门ClickHouse

测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己

UE5第一人称射击游戏蓝图教程

Mongoose module

测试.net文字转语音模块System.Speech

FP6600QSO SOP-8 USB专用充电端口控制器 用于快充电协议和QC2.0/3.0
随机推荐
测试行业干了5年,从只会点点点到了现在的测试开发,总算是证明了自己
自动化早已不是那个自动化了,谈一谈自动化测试现状和自我感受……
X射线的应用是什么?
Servo System of Hydraulic Steering Gear Based on Fuzzy PID
JMeter笔记3 | JMeter安装和环境说明
Tensorflow中实现正则化
向量检索基础方法总结
Microsoft Office 2019 软件下载安装详细教程!
数据库系统原理与应用教程(069)—— MySQL 练习题:操作题 95-100(十三):分组查询与聚合函数的使用
KDD‘21推荐系统离散特征表征无embedding table Learning to Embed Categorical Features without Embedding Tables for
592. Fraction Addition and Subtraction
华为无线设备配置Mesh业务
【网络工程】A、B、C、D、E类IP地址划分依据和特殊的IP地址
C语言向MySQL插入数据
FP6606CMP5 CPC-16L USB类型-C和PD充电控制器 百盛电子代理商
论文阅读之《Underwater scene prior inspired deep underwater image and video Enhancement (UWCNN)》
C陷阱与缺陷 第6章 预处理器 6.3 宏并不是语句
[HarekazeCTF2019]Avatar Uploader 1
Graph Attention Mechanism
浅谈在线编辑器中增量编译技术的应用