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实现搜索指定目录下文件及文件内搜索指定关键词的方法
Jun 28 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
python利用datetime模块计算程序运行时间问题
Feb 20 Python
关于tensorflow softmax函数用法解析
Jun 30 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 Python
Python如何测试stdout输出
Aug 10 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
pytho matplotlib工具栏源码探析一之禁用工具栏、默认工具栏和工具栏管理器三种模式的差异
Feb 25 Python
python用字节处理文件实例讲解
Apr 13 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桌面中心(一) 创建数据库
2007/03/11 PHP
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
php-fpm中max_children的配置
2019/03/15 PHP
javascript document.compatMode兼容性
2010/02/23 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
jQuery实现大图轮播
2017/02/13 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
Angular2使用jQuery的方法教程
2017/05/28 jQuery
React组件之间的通信的实例代码
2017/06/27 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
JS运动特效之任意值添加运动的方法分析
2018/01/24 Javascript
vue动画打包后失效问题的解决方法
2018/09/18 Javascript
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
基于python的汉字转GBK码实现代码
2012/02/19 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
python如何删除文件、目录
2020/06/23 Python
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
自荐信需注意事项
2014/01/25 职场文书
棉花姑娘教学反思
2014/02/15 职场文书
辅导员评语
2014/05/04 职场文书
三八红旗手先进事迹材料
2014/05/13 职场文书
法律专业求职信
2014/05/24 职场文书
学生会工作感言
2015/08/07 职场文书
汽车销售员工作总结
2015/08/12 职场文书
Go Gin实现文件上传下载的示例代码
2021/04/02 Golang
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers