python爬虫selenium和bs4_如何实现Selenium+BeautifulSoup4制作一个python爬虫

如何实现Selenium+BeautifulSoup4制作一个python爬虫

发布时间:2020-11-07 14:34:32

来源:亿速云

阅读:83

作者:Leah

这期内容当中小编将会给大家带来有关如何实现Selenium+BeautifulSoup4制作一个python爬虫,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容。

在爬虫领域,Selenium永远是最后一道防线。从本质上来说,访问网页实际上就是一个接口请求。请求url后,返回的是网页的源代码。

我们只需要解析html或者通过正则匹配提取出我们需要的数据即可。

有些网站我们可以使用requests.get(url),得到的响应文本中获取到所有的数据。而有些网页数据是通过JS动态加载到页面中的。使用requests获取不到或者只能获取到一部分数据。

此时我们就可以使用selenium打开页面来,使用driver.page_source来获取JS执行完后的完整源代码。

例如,我们要爬取,diro官网女包的名称,价格,url,图片等数据,可以使用requests先获取到网页源代码:

访问网页,打开开发者工具,我们可以看到所有的商品都在一个标签里,展开这个li标签,我们可找到商品名称,价格,url,图片链接等信息

ca649ffec98af28253b506d3f50e14cb.png

从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()

运行结果,如下图:

a756c0bb1c9093b86945f6e87046a336.png注:本例中,也可以使用requests.get()获取网页源代码,格式和使用selenium加载的稍有不同。

一般简单爬虫编写的步骤为:进入列表页,打开开发者工具,刷新页面及向下滚动,查看新产品加载,是否能抓到XHR数据接口(直接返回JSON格式所有产品数据的接口)

如果有这种接口,尝试修改参数中的分页值,和请求总数值,看看是否能从一个接口返回所有的商品数据

如果只有Doc类型的接口返回页面,尝试使用requests.get()请求页面,分析响应文本,是否包含所有商品数据

如果requests获取不到商品数据或数据不全可以使用selenium加载页面,然后使用bs4解析提取,如果有多个页面,循环逐个操作即可。

上述就是小编为大家分享的如何实现Selenium+BeautifulSoup4制作一个python爬虫了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值