Selenium结合BeautifulSoup4编写简单的python爬虫
作者:韩志超 发布时间:2022-04-04 11:22:33
在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容。
在爬虫领域,Selenium永远是最后一道防线。从本质上来说,访问网页实际上就是一个接口请求。请求url后,返回的是网页的源代码。
我们只需要解析html或者通过正则匹配提取出我们需要的数据即可。
有些网站我们可以使用requests.get(url),得到的响应文本中获取到所有的数据。而有些网页数据是通过JS动态加载到页面中的。使用requests获取不到或者只能获取到一部分数据。
此时我们就可以使用selenium打开页面来,使用driver.page_source来获取JS执行完后的完整源代码。
例如,我们要爬取,diro官网女包的名称,价格,url,图片等数据,可以使用requests先获取到网页源代码:
访问网页,打开开发者工具,我们可以看到所有的商品都在一个
标签里,展开这个li标签,我们可找到商品名称,价格,url,图片链接等信息
从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()
运行结果,如下图:
注:本例中,也可以使用requests.get()获取网页源代码,格式和使用selenium加载的稍有不同。
一般简单爬虫编写的步骤为:
进入列表页,打开开发者工具,刷新页面及向下滚动,查看新产品加载,是否能抓到XHR数据接口(直接返回JSON格式所有产品数据的接口)
如果有这种接口,尝试修改参数中的分页值,和请求总数值,看看是否能从一个接口返回所有的商品数据
如果只有Doc类型的接口返回页面,尝试使用requests.get()请求页面,分析响应文本,是否包含所有商品数据
如果requests获取不到商品数据或数据不全可以使用selenium加载页面,然后使用bs4解析提取,如果有多个页面,循环逐个操作即可。
来源:https://www.cnblogs.com/superhin/p/11482940.html


猜你喜欢
- 如下所示:import cv2import os#图片路径im_dir = '/home/suanfa/data/out/20170
- 前言 作者: 罗昭成PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://note.youdao.com/not
- 1:事件机制共享队列:利用消息机制在两个队列中,通过传递消息,实现可以控制的生产者消费者问题要求:readthread读时,writethr
- 前言昨天写小项目的时候遇到了一个需求:把txt文档的数据导入到mysql数据库中,开始本来想直接用Mysql Workbench导入TXT文
- 将一份一亿多条数据的csv文件等分为10份,代码如下所示:import pandas as pddata = pd.read_c
- 本文实例为大家分享了python感知机实现的具体代码,供大家参考,具体内容如下一、实现例子李航《统计学方法》p29 例2.1正例:x1=(3
- 问:怎样才能取得局域网中所有SQL Server的实例?答:请参考以下的具体步骤:SmoApplication.EnumAvailableS
- 引伸阅读解读absolute与relativeposition:relative/absolute无法冲破的等级定位一直是WEB标准应用中的
- 源由刚开始是帮朋友做一个按键精灵操作旺信的脚本,写完后各种不稳定;后来看到python可以操作win32相关的api,恰好这一段时间正在学习
- 你喜欢在博客文章中使用图片吗?是的,如果不是很麻烦的话,相信大家都不会介意放上几张漂亮的图片来点缀一下内容的,不过你的图片可能会导致下面的两
- 用python实现21点小游戏,供大家参考,具体内容如下from random import shuffleimport randomimp
- 实现用户登录并且输入错误三次后锁定该用户我的测试环境,win7,python3.5.1提示输入用户名,和密码判断是否被锁定判断用户名和密码是
- 1、引入模块import zipfilezip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面
- tensorflow里面提供了实现图像进行裁剪和填充的函数,就是tf.image.resize_image_with_crop_or_pad
- 本文实例总结了Python字典常见操作。分享给大家供大家参考,具体如下:简单的字典:字典就是键值对key-value组合。#字典 键值对组合
- 本文实例讲述了JavaScript实现的鼠标跟随特效。分享给大家供大家参考,具体如下:鼠标是现在电脑的基本配置之一,也是最常用的输入命令的工
- 在开发的过程中,我们不可避免的会遇到各种各样的编码,解码,或者乱码问题,很多时候,我们可以正常的解决问题,但是说实在的,我们有可能并不清楚问
- 本文实例讲述了Python正则替换字符串函数re.sub用法。分享给大家供大家参考,具体如下:python re.sub属于python正则
- 分析在Python中,字符串是不可变的。所以无法直接删除字符串之间的特定字符。所以想对字符串中字符进行操作的时候,需要将字符串转变为列表,列
- CSDN免积分下载 你懂的。1、输入资源地址如:http://download.csdn.net/download/gengqkun/412