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模块实现读取与写入csv数据的方法
Jan 18 Python
分析Python中解析构建数据知识
Jan 20 Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
python实现简易数码时钟
Feb 19 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python实现智能语音天气预报
Dec 02 Python
Python调用.NET库的方法步骤
Dec 27 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
Feb 07 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
Python实现日志实时监测的示例详解
Apr 06 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+MySQL投票系统的设计和实现分享
2012/09/23 PHP
PHP+MySQL修改记录的方法
2015/01/21 PHP
php去除二维数组的重复项方法
2015/11/03 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
2015/12/17 PHP
PHP中仿制 ecshop验证码实例
2017/01/06 PHP
PhpStorm2020 + phpstudyV8 +XDebug的教程详解
2020/09/17 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
2017/09/04 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
微信小程序事件对象中e.target和e.currentTarget的区别详解
2019/05/08 Javascript
在vue-cli3中使用axios获取本地json操作
2020/07/30 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
[00:14]护身甲盾
2019/03/06 DOTA
Python学习笔记之抓取某只基金历史净值数据实战案例
2019/06/03 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
Python中logger日志模块详解
2020/08/04 Python
HTML5地理定位与第三方工具百度地图的应用
2016/11/17 HTML / CSS
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
求职自荐信
2013/12/14 职场文书
项目计划书范文
2014/01/09 职场文书
九年级体育教学反思
2014/01/23 职场文书
小学语文教学反思
2014/02/10 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
财务部会计岗位职责
2015/02/03 职场文书
2015入党自传书范文
2015/06/26 职场文书
《水浒传》读后感3篇(范文)
2019/09/19 职场文书