Selenium结合BeautifulSoup4编写简单的python爬虫


Posted in Python onNovember 06, 2020

在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容。

在爬虫领域,Selenium永远是最后一道防线。从本质上来说,访问网页实际上就是一个接口请求。请求url后,返回的是网页的源代码。

我们只需要解析html或者通过正则匹配提取出我们需要的数据即可。

有些网站我们可以使用requests.get(url),得到的响应文本中获取到所有的数据。而有些网页数据是通过JS动态加载到页面中的。使用requests获取不到或者只能获取到一部分数据。
此时我们就可以使用selenium打开页面来,使用driver.page_source来获取JS执行完后的完整源代码。

例如,我们要爬取,diro官网女包的名称,价格,url,图片等数据,可以使用requests先获取到网页源代码:
访问网页,打开开发者工具,我们可以看到所有的商品都在一个

  • 标签里,展开这个li标签,我们可找到商品名称,价格,url,图片链接等信息

Selenium结合BeautifulSoup4编写简单的python爬虫

从html格式的源码中提取数据,有多种选择,可以使用xml.etree等等方式,bs4是一个比较方便易用的html解析库,配合lxml解析速度比较快。

bs4的使用方法为

from bs4 import BeautifulSoup

soup = BeautifulSoup(网页源代码字符串,'lxml')

soup.find(...).find(...)
soup.findall()
soup.select('css selector语法')

soup.find()可以通过节点属性进行查找,如,soup.find('div', id='节点id')或soup.find('li', class_='某个类名')或soup.find('标签名', 属性=属性值),当找到一个节点后,还可以使用这个节点继续在其子节点中查找。
soup.find_all()是查找多个,同样属性的节点,返回一个列表。
soup.select()是使用css selector语法查找,返回一个列表。

以下为示例代码:

from selenium import webdriver
from bs4 import BeautifulSoup

driver = webdriver.Chrome()
driver.get('https://www.dior.cn/zh_cn/女士精品/皮具系列/所有手提包')
soup = BeautifulSoup(driver.page_source, 'lxml')

products = soup.select('li.is-product')
for product in products:
 name = product.find('span', class_='product-title').text.strip()
 price = product.find('span', class_='price-line').text.replace('¥', '').replace(',','')
 url = 'https://www.dior.cn' + product.find('a', class_='product-link').attrs['href']
 img = product.find('img').attrs['src']
 sku = img.split('/')[-1]
 print(name, sku, price)

driver.quit()

运行结果,如下图:

Selenium结合BeautifulSoup4编写简单的python爬虫

注:本例中,也可以使用requests.get()获取网页源代码,格式和使用selenium加载的稍有不同。

一般简单爬虫编写的步骤为:

  • 进入列表页,打开开发者工具,刷新页面及向下滚动,查看新产品加载,是否能抓到XHR数据接口(直接返回JSON格式所有产品数据的接口)
  • 如果有这种接口,尝试修改参数中的分页值,和请求总数值,看看是否能从一个接口返回所有的商品数据
  • 如果只有Doc类型的接口返回页面,尝试使用requests.get()请求页面,分析响应文本,是否包含所有商品数据
  • 如果requests获取不到商品数据或数据不全可以使用selenium加载页面,然后使用bs4解析提取,如果有多个页面,循环逐个操作即可。

以上就是Selenium结合BeautifulSoup4编写简单的python爬虫的详细内容,更多关于python 爬虫的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
解决python写的windows服务不能启动的问题
Apr 15 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
Python的Django框架中模板碎片缓存简介
Jul 24 Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 Python
深入浅析Python中的yield关键字
Jan 24 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
python Opencv计算图像相似度过程解析
Dec 03 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
python两种获取剪贴板内容的方法
Nov 06 #Python
用python写一个带有gui界面的密码生成器
Nov 06 #Python
python如何编写类似nmap的扫描工具
Nov 06 #Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 #Python
基于Python模拟浏览器发送http请求
Nov 06 #Python
python如何写个俄罗斯方块
Nov 06 #Python
基于Python实现全自动下载抖音视频
Nov 06 #Python
You might like
做个自己站内搜索引擎
2006/10/09 PHP
基于Windows下Apache PHP5.3.1安装教程
2010/01/08 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
joomla实现注册用户添加新字段的方法
2016/05/05 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
php-msf源码详解
2017/12/25 PHP
JavaScript 入门·JavaScript 具有全范围的运算符
2007/10/01 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
jquery浏览器滚动加载技术实现方案
2014/06/03 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
详解js中==与===的区别
2017/01/08 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
Node.js模拟发起http请求从异步转同步的5种用法
2018/09/26 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python的组合模式与责任链模式编程示例
2016/02/02 Python
Python实现手写一个类似django的web框架示例
2018/07/20 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
基于梯度爆炸的解决方法:clip gradient
2020/02/04 Python
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
销售主管的自我评价分享
2014/01/03 职场文书
产品生产计划书
2014/05/07 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
党的群众路线教育实践活动专题组织生活会发言材料
2014/10/17 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
公司庆典主持词
2015/07/04 职场文书