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 13 Python
python实现html转ubb代码(html2ubb)
Jul 03 Python
python在linux系统下获取系统内存使用情况的方法
May 11 Python
利用TensorFlow训练简单的二分类神经网络模型的方法
Mar 05 Python
python opencv实现切变换 不裁减图片
Jul 26 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
python中property和setter装饰器用法
Dec 19 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
用Python实现职工信息管理系统
Dec 30 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中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
php 读写json文件及修改json的方法
2018/03/07 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
js数组去重的5种算法实现
2015/11/04 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
Angular 4.x+Ionic3踩坑之Ionic 3.x界面传值详解
2018/03/13 Javascript
小程序tab页无法传递参数的方法
2018/08/03 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
详解python 利用echarts画地图(热力图)(世界地图,省市地图,区县地图)
2019/08/06 Python
PyTorch中Tensor的数据统计示例
2020/02/17 Python
python修改linux中文件(文件夹)的权限属性操作
2020/03/05 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
html5与css3小应用
2013/04/03 HTML / CSS
台湾最大网路书店:博客来
2018/03/18 全球购物
为有想象力的人提供的生活方式商店:Firebox
2018/06/04 全球购物
全国道德模范事迹
2014/02/01 职场文书
精神文明建设先进工作者事迹材料
2014/05/02 职场文书
巾帼建功标兵事迹材料
2014/05/11 职场文书
植物生产学专业求职信
2014/08/08 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
详解Python flask的前后端交互
2022/03/31 Python
Java完整实现记事本代码
2022/06/16 Java/Android
Java获取字符串编码格式实现思路
2022/09/23 Java/Android