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 socket网络编程步骤详解(socket套接字使用)
Dec 06 Python
跟老齐学Python之编写类之二方法
Oct 11 Python
Python如何生成树形图案
Jan 03 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
利用Python复制文件的9种方法总结
Sep 02 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
Python OpenCV视频截取并保存实现代码
Nov 30 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
python2 对excel表格操作完整示例
Feb 23 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
浅析python中特殊文件和特殊函数
Feb 24 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
2020/04/02 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
JavaScript 乱码问题
2009/08/06 Javascript
Ruffy javascript 学习笔记
2009/11/30 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
基于Jquery的动态添加控件并取值的实现代码
2010/09/24 Javascript
Javascript中找到子元素在父元素内相对位置的代码
2012/07/21 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
用js实现简单算法的实例代码
2016/09/24 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
浅谈Angular HttpClient简单入门
2018/05/04 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
Python实现字符串反转的常用方法分析【4种方法】
2017/09/30 Python
python爬虫之BeautifulSoup 使用select方法详解
2017/10/23 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
Html5新标签datalist实现输入框与后台数据库数据的动态匹配
2017/05/18 HTML / CSS
澳大利亚百货公司:David Jones
2018/02/08 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
银行领导证婚词
2014/01/11 职场文书
还款承诺书范文
2014/05/20 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
2016春节慰问信范文
2015/03/25 职场文书
2019生态环境保护倡议书!
2019/07/03 职场文书
jupyter notebook保存文件默认路径更改方法汇总(亲测可以)
2021/06/09 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL