Python Selenium爬虫实战应用
本节讲解 Python Selenium 爬虫实战案例,通过对实战案例的讲解让您进一步认识 Selenium 框架。
实战案例目标:抓取京东商城(https://www.jd.com/)商品名称、商品价格、评论数量,以及商铺名称。比如输入搜索“Python书籍”,则抓取如下数据:
{'name': 'Python编程 从入门到实践 第2版 人民邮电出版社', 'price': '¥52.50', 'count': '200+条评价', 'shop': '智囊图书专营店'}
{'name': 'Python编程 从入门到实践 第2版(图灵出品)', 'price': '¥62.10', 'count': '20万+条评价', 'shop': '人民邮电出版社'}
...
Selenium 框架的学习重点在于定位元素节点,关于如何定位,我们已经介绍了 8 种方法,其中 Xpath 表达式适用性强,并且便捷。因此,建议大家多多熟悉 Xpath 表达式的相关语法规则。本节案例中很大一部分采用了 Xpath 表达式定位元素,希望帮助您温故知新。
本节案例中涉及了几个技术难点:第一,如何下拉滚动条下载商品,第二,如何实现翻页,也就是抓取下一页的内容,第三,如何判断数据已经抓取完毕,即终止页。下面我们逐步讲解。
实现自动搜索
实现自动输出、自动搜索是最基础的一步。首先定位输入框的的节点,其次定位搜索按钮节点,这与实现百度自动搜索思路一致,最关键就是要正确定位元素节点。
通过开发者调试工具检查相应的的位置,可得如下 Xpath 表达式:
**
输入框表达式://*[@id="key"]
搜索按钮表达式://*[@class='form']/button
代码如下所示:
- from selenium import webdriver
- broswer=webdriver.Chrome()
- broswer.get(‘https://www.jd.com/’)
- broswer.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(“python书籍”)
- broswer.find_element_by_xpath(“//*[@class=‘form’]/button”).click()
滚动滑动条
实现了自动搜索后,接下来就是要抓取页面中的商品信息,而您会发现只有将滑动条滚动至底部,商品才会全部加载完毕。滚动滑轮操作的代码如下:
scrollTo(xpos,ypos)
execute_script()执行js语句,拉动进度条件
- #scrollHeight属性,表示可滚动内容的高度
- self.browser.execute_script(
- ‘window.scrollTo(0,document.body.scrollHeight)’#拉动进度条至底部
- )
之后在通过 Xpath 表达式匹配所有商品,并将它们放入一个大列表中,通过循环列表取出每个商品,最后提取出想要的信息。
- li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
- for li in li_list:
- item={}
提取商品名
- item[‘name’]=li.find_element_by_xpath(‘.//div[@class=“p-name”]/a/em’).text.strip()
提取价格
- item[‘price’]=li.find_element_by_xpath(‘.//div[@class=“p-price”]’).text.strip()
提取评论数量
- item[‘count’]=li.find_element_by_xpath(‘.//div[@class=“p-commit”]/strong’).text.strip()
提取商家店铺
- item[‘shop’]=li.find_element_by_xpath(‘.//div[@class=“p-shopnum”]’).text.strip()
实现翻页抓取
如何实现翻页抓取数据,并判断数据数据已经抓取完毕呢?这其实并不难想到,我们可以先跳至终止页(即最后一页)。此时最后一页的“下一页”处于不可用状态,其元素节点如下:
**
终止页下一页class属性:<a class="pn-next disabled"><em>下一页</em><i> > </i></a>
其他页下一页class属性:<a class="pn-next" onclick="SEARCH.page(3, true)" ...><em>下一页</em><i> > </i></a>
如果页面源码中有上述代码存在,则证明此页是最后一页,若没有则不是。因此通过 if …else 语句即可实现上述需求,如下所示:
- #-1说明没找到,不是最后一页,执行点击 “下一页” 操作
- if self.browser.page_source.find(‘pn-next disabled’)==-1:
- browser.find_element_by_class_name(‘pn-next’).click()
完整程序代码
完整程序代码如下所示:
- #coding:utf8
- from selenium import webdriver
- import time
- import pymongo
- class JdSpider(object):
- def init(self):
- self.url=‘http://www.jd.com/’
- self.options=webdriver.ChromeOptions() # 无头模式
- self.options.add_argument(‘–headless’)
- self.browser=webdriver.Chrome(options=self.options) # 创建无界面参数的浏览器对象
- self.i=0 #计数,一共有多少件商品
- #输入地址+输入商品+点击按钮,切记这里元素节点是京东首页的输入栏、搜索按钮
- def get_html(self):
- self.browser.get(self.url)
- self.browser.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(‘python书籍’)
- self.browser.find_element_by_xpath(“//*[@class=‘form’]/button”).click()
- #把进度条件拉倒最底部+提取商品信息
- def get_data(self):
执行js语句,拉动进度条件
- self.browser.execute_script(
- ‘window.scrollTo(0,document.body.scrollHeight)’
- )
给页面元素加载时预留时间
- time.sleep(2)
- #用 xpath 提取每页中所有商品,最终形成一个大列表
- li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
- for li in li_list:
- #构建空字典
- item={}
- item[‘name’]=li.find_element_by_xpath(‘.//div[@class=“p-name”]/a/em’).text.strip()
- item[‘price’]=li.find_element_by_xpath(‘.//div[@class=“p-price”]’).text.strip()
- item[‘count’]=li.find_element_by_xpath(‘.//div[@class=“p-commit”]/strong’).text.strip()
- item[‘shop’]=li.find_element_by_xpath(‘.//div[@class=“p-shopnum”]’).text.strip()
- print(item)
- self.i+=1
- def run(self):
- #搜索出想要抓取商品的页面
- self.get_html()
- #循环执行点击“下一页”操作
- while True:
- #获取每一页要抓取的数据
- self.get_data()
- #判断是否是最一页
- if self.browser.page_source.find(‘pn-next disabled’)==-1:
- self.browser.find_element_by_class_name(‘pn-next’).click()
- #预留元素加载时间
- time.sleep(1)
- else:
- print(‘数量’,self.i)
- break
- if name == ‘main’:
- spider=JdSpider()
- spider.run()
{'name': 'Python编程 从入门到实践 第2版(图灵出品) 人民邮电出版社', 'price': '¥52.50', 'count': '200+条评价', 'shop': '智囊图书专营店'}
{'name': 'Python编程 从入门到实践 第2版(图灵出品)', 'price': '¥62.10', 'count': '20万+条评价', 'shop': '人民邮电出版社'}
{'name': 'Python编程三剑客:Python编程从入门到实践第2版+快速上手第2版+极客编程(套装共3册)', 'price': '¥206.90', 'count': '5万+条评价', 'shop': '人民邮电出版社'}
{'name': 'Python数据分析从入门到实践(excel高效办公)(3全彩版)', 'price': '¥46.10', 'count': '10万+条评价', 'shop': '明日科技京东自营旗舰店'}
{'name': '零基础学Python(编程入门 项目实践 同步视频)(3全彩版)', 'price': '¥37.50', 'count': '10万+条评价', 'shop': '明日科技京东自营旗舰店'}
{'name': 'Python编程快速上手 让繁琐工作自动化 第2版', 'price': '¥44.50', 'count': '10万+条评价', 'shop': '人民邮电出版社'}
{'name': '现货包邮Python学习手册(原书第5版)上下册2本/计算机编程设计|8053406', 'price': '¥142.30', 'count': '100+条评价', 'shop': '互动创新图书专营店'}
{'name': '零基础入门学习Python(第2版)', 'price': '¥70.30', 'count': '1万+条评价', 'shop': '清华大学出版社'}
{'name': '超简单:用Python让Excel飞起来', 'price': '¥34.90', 'count': '2万+条评价', 'shop': '机械工业出版社自营官方旗舰店'}
{'name': '流畅的Python(图灵出品)', 'price': '¥109.80', 'count': '2万+条评价', 'shop': '人民邮电出版社'}
{'name': 'Python编程从入门到实践第二版 python编程从入门到实战零基础自学教程计算机基础语言数据分析', 'price': '¥49.80', 'count': '5000+条评价', 'shop': '墨马图书旗舰店'}
{'name': 'Python深度学习:基于PyTorch', 'price': '¥73.40', 'count': '5万+条评价', 'shop': '机械工业出版社自营官方旗舰店'}
{'name': 'Python自然语言处理实战:核心技术与算法 自然语言处理教程', 'price': '¥48.30', 'count': '37条评价', 'shop': '芝麻开门图书专营店'}
{'name': 'Effective Python:编写高质量Python代码的90个有效方法(原书第2版)', 'price': '¥110.60\n¥105.10', 'count': '2万+条评价', 'shop': '机械工业出版社自营官方旗舰店'}
...
零基础Python学习资源介绍
WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ... WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ... Python网络爬虫实战项目代码大全(长期更新,欢迎补充) 阿橙 · 1 个月内 WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫, ... 2016年12月27日晚8点半,CSDN特邀IT专家.<Python系列实战教程>系列图书作者韦玮带来了主题为"Python网络爬虫反爬破解策略实战"的Chat交流.以 ... 廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ... 原标题:Python 网络爬虫实战项目代码大全 DouBanSpider 豆瓣读书的爬虫.你可以爬豆瓣读书下面标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价 ... 11月16日,一部无流量明星.无大制作.无大IP的"三无"国产电影<无名之辈>上映后,竟然连续打败了超级英雄"毒液".会魔法的"神奇动物& ... 接上回,<Python 网络爬虫实战:爬取<去哪儿>网数千篇旅游攻略数据>. 我们爬取到了数千篇的旅游攻略文章的数据. 但是事情还没有结束,对于大部分的人来讲,最希望得到的东西 ... Python[爬虫实战]爬取美女壁纸资源 一:首先选取一个网站,这里我们选择了一个壁纸网站 二:进入网站,我们可以看到很多图片放在一页里 三:按下F12开发者工具,点击Elments查看网页的代码 四 ...Python Selenium爬虫实战应用相关推荐
最新文章
热门文章