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读取csv文件示例(python操作csv)
Mar 11 Python
python查询sqlite数据表的方法
May 08 Python
python&MongoDB爬取图书馆借阅记录
Feb 05 Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
Python使用Matplotlib实现Logos设计代码
Dec 25 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
Python语言快速上手学习方法
Dec 14 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
jupyter notebook 增加kernel教程
Apr 10 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
Python-typing: 类型标注与支持 Any类型详解
May 10 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实现的树形结构数据存取类实例
2014/11/29 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
jquery获取css的color值返回RGB的方法
2015/12/18 Javascript
详解javascript高级定时器
2015/12/31 Javascript
jQuery使用zTree插件实现树形菜单和异步加载
2016/02/25 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
jQuery实现的表格前端排序功能示例
2017/09/18 jQuery
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
Vue手把手教你撸一个 beforeEnter 钩子函数
2018/04/24 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
关于layui时间回显问题的解决方法
2019/09/24 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Python实现字典按照value进行排序的方法分析
2017/12/23 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
java关于string最常出现的面试题整理
2021/01/18 Python
详解CSS的border边框属性及其在CSS3中的新特性
2016/05/10 HTML / CSS
英国排名第一的冲浪店:Ann’s Cottage
2020/06/21 全球购物
Linux中如何用命令创建目录
2016/12/02 面试题
UNIX文件名称有什么规定
2013/03/25 面试题
计算机专业应届毕业生自荐信
2013/09/26 职场文书
信息科学与技术专业求职信范文
2014/02/20 职场文书
秋季校运动会广播稿
2014/02/23 职场文书
企业宣传口号
2014/06/12 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
道德与公民自我评价
2015/03/09 职场文书
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python