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删除文件示例分享
Jan 28 Python
python socket 超时设置 errno 10054
Jul 01 Python
Python 提取dict转换为xml/json/table并输出的实现代码
Aug 28 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
python实现自动登录
Sep 17 Python
详解Python中is和==的区别
Mar 21 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
python str字符串转uuid实例
Mar 03 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Autopep8的使用(python自动编排工具)
Mar 02 Python
Python中的套接字编程是什么?
Jun 21 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
Wordpress php 分页代码
2009/10/21 PHP
PHP实现从远程下载文件的方法
2015/03/12 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
ThinkPHP 5 AJAX跨域请求头设置实现过程解析
2020/10/28 PHP
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
通过JS动态创建一个html DOM元素并显示
2014/10/15 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
jQuery在ul中显示某个li索引号的方法
2015/03/17 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
js实现图片缓慢放大缩小效果
2016/08/02 Javascript
node.js发送邮件email的方法详解
2017/01/06 Javascript
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
Vue.js中的extend绑定节点并显示的方法
2019/06/20 Javascript
微信小程序后台持续定位功能使用详解
2019/08/23 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
python实现简单购物商城
2016/05/21 Python
python常见的格式化输出小结
2016/12/15 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
为什么相对PHP黑python的更少
2020/06/21 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
The Kooples美国官方网站:为情侣提供的法国当代时尚品牌
2019/01/03 全球购物
书法兴趣小组活动总结
2014/07/07 职场文书
民族团结好少年事迹材料
2014/08/19 职场文书
2015年人事科工作总结
2015/04/28 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书