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学习数据结构实例代码
May 11 Python
如何将python中的List转化成dictionary
Aug 15 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python实现在图片上画特定大小角度矩形框
Oct 24 Python
python中使用 xlwt 操作excel的常见方法与问题
Jan 13 Python
wxPython实现画图板
Aug 27 Python
python基于plotly实现画饼状图代码实例
Dec 16 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Matplotlib中rcParams使用方法
Jan 05 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中使用Oracle数据库(1)
2006/10/09 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP使用PDO抽象层获取查询结果的方法示例
2018/05/10 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
js 输出内容到新窗口具体实现代码
2013/05/31 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
bootstrap响应式工具使用详解
2017/11/29 Javascript
代码分析vue中如何配置less
2018/09/28 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
详解Vue之事件处理
2020/07/10 Javascript
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
python字典DICT类型合并详解
2017/08/17 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
搞定这套Python爬虫面试题(面试会so easy)
2019/04/03 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
Yahoo的PHP面试题
2014/05/26 面试题
即将毕业大学生自荐信
2014/01/24 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
毕业班工作总结
2015/08/10 职场文书