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脚本实现集群检测和管理功能
Mar 06 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
Dec 03 Python
Python输出各行命令详解
Feb 01 Python
通过Python模块filecmp 对文件比较的实现方法
Jun 29 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
Pandas之Dropna滤除缺失数据的实现方法
Jun 25 Python
python并发编程多进程 互斥锁原理解析
Aug 20 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
python PIL模块的基本使用
Sep 29 Python
Python装饰器详细介绍
Mar 25 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
谈谈PHP语法(4)
2006/10/09 PHP
再次研究下cache_lite
2007/02/14 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
php+mysql开发中的经验与常识小结
2019/03/25 PHP
laravel请求参数校验方法
2019/10/10 PHP
javawscript 三级菜单的实现原理
2009/07/01 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
JavaScript中通过提示框跳转页面的方法
2016/02/14 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
jQuery插件echarts实现的循环生成图效果示例【附demo源码下载】
2017/03/04 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
基于vue循环列表时点击跳转页面的方法
2018/08/31 Javascript
vue路由事件beforeRouteLeave及组件内定时器的清除方法
2018/09/29 Javascript
javascript实现文本框标签验证的实例代码
2018/10/14 Javascript
Python常用模块用法分析
2014/09/08 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
Python读取一个目录下所有目录和文件的方法
2016/07/15 Python
Python构建XML树结构的方法示例
2017/06/30 Python
Python3离线安装Requests模块问题
2019/10/13 Python
深入浅析Python代码规范性检测
2020/07/31 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
大型车展策划方案
2014/02/01 职场文书
教师工作自我鉴定范文
2014/09/14 职场文书
计划生育诚信协议书
2014/11/02 职场文书
三好学生事迹材料
2014/12/24 职场文书
质检员岗位职责
2015/02/03 职场文书
MySQL表的增删改查(基础)
2021/04/05 MySQL
python读取mat文件生成h5文件的实现
2022/07/15 Python