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读写文件操作示例程序
Dec 02 Python
python实现马耳可夫链算法实例分析
May 20 Python
Python实现的简单hangman游戏实例
Jun 28 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
python简单鼠标自动点击某区域的实例
Jun 25 Python
python简单区块链模拟详解
Jul 03 Python
Python调用C语言的实现
Jul 26 Python
Django中的静态文件管理过程解析
Aug 01 Python
pyinstaller打包成无控制台程序时运行出错(与popen冲突的解决方法)
Apr 15 Python
python 线程的五个状态
Sep 22 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 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
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
js微信分享实现代码
2020/10/11 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
Ajax请求时无法重定向的问题解决代码详解
2019/06/21 Javascript
js实现图片区域可点击大小随意改变(适用移动端)代码实例
2019/09/11 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
微信小程序云函数添加数据到数据库的方法
2020/03/04 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
python3批量删除豆瓣分组下的好友的实现代码
2016/06/07 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
pytorch masked_fill报错的解决
2020/02/18 Python
基于Django signals 信号作用及用法详解
2020/03/28 Python
python脚本定时发送邮件
2020/12/22 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
个人求职信范文分享
2013/12/13 职场文书
学习心得体会
2014/01/01 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
大学军训感言1000字
2014/02/25 职场文书
小学数学课后反思
2014/04/23 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
初中数学教学随笔
2015/08/15 职场文书
解除租赁合同协议书
2016/03/21 职场文书
安全责任协议书范本
2016/03/23 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏