分享好友 最新动态首页 最新动态分类 切换频道
Python Selenium爬虫实战应用
2024-12-26 14:00

本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架。

实战案例目标:抓取京东商城(https://www.jd.com/)商品名称、商品价格、评论数量,以及商铺名称。比如输入搜索“Python书籍”,则抓取如下数据

 

Selenium 框架的学习重点在于定位元素节点,关于如何定位,我们已经介绍了 8 种方法,其中 Xpath 表达式适用性强,并且便捷。因此,建议大家多多熟悉 Xpath 表达式的相关语法规则。本节案例中很大一部分采用了 Xpath 表达式定位元素,希望帮助您温故知新。

本节案例中涉及了几个技术难点:第一,如何下拉滚动条下载商品,第二,如何实现翻页,也就是抓取下一页的内容,第三,如何判断数据已经抓取完毕,即终止页。下面我们逐步讲解。

实现自动输出、自动搜索是最基础的一步。首先定位输入框的的节点,其次定位搜索按钮节点,这与实现百度自动搜索思路一致,最关键就是要正确定位元素节点。

通过开发者调试工具检查相应的的位置,可得如下 Xpath 表达式

**

 

代码如下所示

  1. from selenium import webdriver
  2. broswer=webdriver.Chrome()
  3. broswer.get(‘https://www.jd.com/’)
  4. broswer.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(“python书籍”)
  5. broswer.find_element_by_xpath(“//*[@class=‘form’]/button”).click()

实现了自动搜索后,接下来就是要抓取页面中的商品信息,而您会发现只有将滑动条滚动至底部,商品才会全部加载完毕。滚动滑轮操作的代码如下

  1. #scrollHeight属性,表示可滚动内容的高度
  2. self.browser.execute_script(
  3. ‘window.scrollTo(0,document.body.scrollHeight)’#拉动进度条至底部
  4. )

之后在通过 Xpath 表达式匹配所有商品,并将它们放入一个大列表中,通过循环列表取出每个商品,最后提取出想要的信息。

  1. li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
  2. for li in li_list:
  3. item={}
  4. item[‘name’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-name”]/a/em’).text.strip()
  5. item[‘price’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-price”]’).text.strip()
  6. item[‘count’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-commit”]/strong’).text.strip()
  7. item[‘shop’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-shopnum”]’).text.strip()

如何实现翻页抓取数据,并判断数据数据已经抓取完毕呢?这其实并不难想到,我们可以先跳至终止页(即最后一页)。此时最后一页的“下一页”处于不可用状态,其元素节点如下

**

 

如果页面源码中有上述代码存在,则证明此页是最后一页,若没有则不是。因此通过 if …else 语句即可实现上述需求,如下所示

  1. #-1说明没找到,不是最后一页,执行点击 “下一页” 操作
  2. if self.browser.page_source.find(‘pn-next disabled’)==-1:
  3. browser.find_element_by_class_name(‘pn-next’).click()

完整程序代码如下所示

  1. #coding:utf8
  2. from selenium import webdriver
  3. import time
  4. import pymongo
  5. class JdSpider(object):
  6. def init(self):
  7. self.url=‘http://www.jd.com/’
  8. self.options=webdriver.ChromeOptions() # 无头模式
  9. self.options.add_argument(‘–headless’)
  10. self.browser=webdriver.Chrome(options=self.options) # 创建无界面参数的浏览器对象
  11. self.i=0 #计数,一共有多少件商品
  12. #输入地址+输入商品+点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮
  13. def get_html(self):
  14. self.browser.get(self.url)
  15. self.browser.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(‘python书籍’)
  16. self.browser.find_element_by_xpath(“//*[@class=‘form’]/button”).click()
  17. #把进度条件拉倒最底部+提取商品信息
  18. def get_data(self):
  19. self.browser.execute_script(
  20. ‘window.scrollTo(0,document.body.scrollHeight)’
  21. )
  22. time.sleep(2)
  23. #用 xpath 提取每页中所有商品,最终形成一个大列表
  24. li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
  25. for li in li_list:
  26. #构建空字典
  27. item={}
  28. item[‘name’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-name”]/a/em’).text.strip()
  29. item[‘price’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-price”]’).text.strip()
  30. item[‘count’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-commit”]/strong’).text.strip()
  31. item[‘shop’]=li.find_element_by_xpath(‘https://blog.csdn.net/DEVELOPERAA/article/details//div[@class=“p-shopnum”]’).text.strip()
  32. print(item)
  33. self.i+=1
  34. def run(self):
  35. #搜索出想要抓取商品的页面
  36. self.get_html()
  37. #循环执行点击“下一页”操作
  38. while True:
  39. #获取每一页要抓取的数据
  40. self.get_data()
  41. #判断是否是最一页
  42. if self.browser.page_source.find(‘pn-next disabled’)==-1:
  43. self.browser.find_element_by_class_name(‘pn-next’).click()
  44. #预留元素加载时间
  45. time.sleep(1)
  46. else:
  47. print(‘数量’,self.i)
  48. break
  49. if name == ‘main’:
  50. spider=JdSpider()
  51. spider.run()

输出结果如下

 

Selenium 自动化爬虫让你无须关心网站的类型(静态或者动态,只需您按部就班的寻找元素节点,并依此点击,即可实现数据抓取。不过 Selenium 最大的缺点就是效率低,因此它只适合做小规模的数据采集工作。

这里给大家分享一份Python全套学习资料,包括学习路线、软件、源码、视频、面试题等等,都是我自己学习时整理的,希望可以对正在学习或者想要学习Python的朋友有帮助

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击👈

① 学习路线

② 路线对应学习视频

③练习题

① 文档和书籍资料

①Python工具包

②Python实战案例

③Python小游戏源码

👉CSDN大礼包🎁:全网最全《Python学习资料》免费分享(安全链接,放心点击👈

最新文章
Google SEO指南丨第1章 谷歌SEO初学者教程
搜索引擎通过使用称为蜘蛛的机器人抓取网络来工作。这些网络爬虫有效地跟踪页面之间的链接以查找要添加到搜索索引的新内容。当您使用搜索引擎时,将从索引中提取相关结果并使用算法进行排名。下面的过程专门适用于Google,但它可能与Bing等
AI写作助手对SEO内容创作的全面解读
在当今这个信息爆炸的时代,内容是王道,而优质的内容更是企业和个人在互联网上立足的关键。随着人工智能技术的发展,AI写作助手已经成为了内容创作者的得力助手,特别是在SEO(搜索引擎优化)内容创作方面,AI写作助手更是发挥了巨大的作
AI改编短视频不能没边界
  AI改编短视频不能没边界  近期,AI改编短视频风靡网络,引发公众广泛关注和热议。不少视频为博流量,毫无边界亵渎经典IP,冲击传统文化认知。对此,广电总局近日发布了《管理提示(AI魔改)》,旨在加强对此类视频内容的规范管理,保
AI智能写作工具:类型、免费选项与在线网站推荐
在当今数字化的时代人工智能()正在以前所未有的形式改变着咱们的生活和工作形式。尤其在内容创作领域技术的应用更是为人们带来了极大的便利。智能写作工具可以帮助使用者快速生成高优劣的文章、报告、故事甚至诗歌极大地提升了写作效率减
2024年阿里云大促活动尾声,抓紧时间享受低价云服务器!
​​2024年阿里云大促活动尾声,抓紧时间享受低价云服务器!阿里云服务器租用费用价格:阿里云ECS云服务器e系列2核2G配置3M固定带宽99元一年,ECS u1实例2核4G、5M固定带宽、80G ESSD Entry盘优惠价格199元一年,4核8G服务器955元1年,4核1
2024年排列三排列五335期[先锋队长]预测号码
335期体彩排列三排列五本期预测如下:一胆:8二胆:5,8三胆:1,5,8排列三排列五本期杀1码:2排列三排列五本期杀2码:0,2排列三五码组选:13568排列三六码组选:134568排列三定位5*5*5直选:(百位)13467*(十位)34589*(个位)01478排列三4*4*4
688556
2023年6月份,公司的全资子公司宜宾高测(“乙方”)与英发睿能(“甲方”)坚持互利共赢,同等优先的原则,双方构建战略合作伙伴关系,共同推进在单晶硅棒切片领域展开合作。本着合作共赢的原则,双方经友好协商达成战略合作关系并签署了
AI生成美女写真必备:测评最强AI绘图工具,轻松一键打造你的AI女友
DeepAI:DeepAI的特点在于其简单易用的在线界面,你只需要输入文本描述,AI便会为你生成相应的美女图像。这款工具特别适合那些没有绘画基础的用户,但生成的照片效果稳定性稍差,某些复杂的请求可能会处理不当。Daz 3D:这是一款功能强大的
AI软件外包定制开发公司 | 专业智能优化,请给出一些实际案例。
关于“AI软件外包定制开发公司”和“专业智能优化”,以下是一些关键信息和归纳点:### AI软件外包定制开发公司1. 服务内容: - 提供AI营销软件的定制开发服务。 - 能够根据客户需求,开发具有针对性的AI营销软件。 - 服务内容包括但不限于
AI生成PPT的软件有哪些?AI生成PPT软件大盘点
随着中秋节的脚步渐近,活动的筹备工作也进入了尾声。 这时候,我们这些“打工人”就需要制作一份PPT来总结、回顾活动细则和人员安排。然而,制作一份既美观又专业的PPT并非易事,尤其是对于缺乏经验的人来说。 幸
相关文章
推荐文章
发表评论
0评