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 (2)
Oct 31 Python
Python的动态重新封装的教程
Apr 11 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Python实现破解12306图片验证码的方法分析
Dec 29 Python
使用C++扩展Python的功能详解
Jan 12 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
python3爬取淘宝信息代码分析
Feb 10 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
Python原始套接字编程实例解析
Jan 29 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
pytorch SENet实现案例
Jun 24 Python
Python爬虫爬取新闻资讯案例详解
Jul 14 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
php下过滤html代码的函数 提高程序安全性
2010/03/02 PHP
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
PHP 中魔术常量的实例详解
2017/10/26 PHP
PHP+MySQL高并发加锁事务处理问题解决方法
2018/04/30 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
2015/01/19 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
jQuery Ajax全解析
2017/02/13 Javascript
详解Vue-cli 创建的项目如何跨域请求
2017/05/18 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
js canvas画布实现高斯模糊效果
2018/11/27 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
在vue-cli中引入lodash.js并使用详解
2019/11/13 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
python用户管理系统
2018/03/13 Python
python学习开发mock接口
2019/04/28 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
利用Python实现斐波那契数列的方法实例
2020/07/26 Python
python 简单的调用有道翻译
2020/11/25 Python
汉森冲浪板:Hansen Surfboards
2018/05/19 全球购物
初中地理教学反思
2014/01/11 职场文书
小学优秀班干部事迹材料
2014/05/25 职场文书
硕士学位论文评语
2014/12/31 职场文书
Html5通过数据流方式播放视频的实现
2021/04/27 HTML / CSS
JPA 通过Specification如何实现复杂查询
2021/11/23 Java/Android
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL