一 聚焦爬虫数据解析
1.1 基本介绍
聚焦爬虫的编码流程
指定url
基于requests模块发起请求
获取响应对象中的数据
数据解析
进行持久化存储
如何实现数据解析
三种数据解析方式
正则表达式
bs4
xpath
数据解析的原理
- 进行标签定位
- 获取定位好的标签里面的文本数据和属性值
1.2 爬取一个网站的图片
importrequests#1. 指定url
url = "http://mpic.spriteapp.cn/ugc/2019/09/01/5d6be8e4396c4.gif"headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36"}#2. 基于requests模块发起请求#3. 获取响应对象中的数据
page_content = requests.get(url=url, headers=headers).content#4. 进行持久化存储
with open('./火狐突击.gif', 'wb') as f:
f.write(page_content)
执行
就有图片文件保存
上面的功能可以使用urlib实现
#引入urllib的request的模块
from urllib importrequest#指定url
url = "http://mpic.spriteapp.cn/ugc/2019/09/01/5d6be8e4396c4.gif"
#需要两个参数,一个是url.另一个是保存的文件名
request.urlretrieve(url=url,filename="./火狐突击_urllib.gif")
执行后出现
('./火狐突击_urllib.gif', )
查看目录
使用urllib模块下载图片,代码量比较少
有一个缺点,如果有些网站有UA检测机制的话,此方法就不适用
1.3 聚焦爬虫
爬取不得姐的所有图片
其中一张图片信息如下
提取上面内容,使用正则匹配出元数据部分
html ="""
"""#ex = '
"""
#ex = '
第二个.*? 抱得动你吗?" alt="我抱得动你吗?">
"""
importre
# re.S表示单行匹配,可以将字符串中的多行拼接起来,进行统一匹配,如果不加,则会一行一行地进行匹配,最后得到的结果是[]
ex= '
image_url=re.findall(ex,html,re.S)print(image_url[0])
执行
http://mpic.spriteapp.cn/ugc/2020/04/04/5e887902d0f98.gif
完整代码
获取所有图片代码如下
#爬取不得姐网站上面的所有图片
importosimportreimportrequestsfrom urllib importrequest#1. 指定url
url = "http://www.budejie.com/pic/"headers={"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}
ex= '
#判断是否有images文件存在,如果不存在,就创建一个新的,用来存储图片,使用OS模块
if not os.path.exists('./images'):
os.mkdir('./images')#2. 基于requests模块发起请求#3. 获取响应对象中的数据
page_text = requests.get(url=url, headers=headers).text#4. 数据解析
img_url_list =re.findall(ex, page_text, re.S)#5. 进行持久化存储
for img_url inimg_url_list:#获取到图片的url之后,可以对这个如来进行切割,得到图片的名称,并进行存储,同时由于还有一层目录,就可以吧images拼接到字符串中
img_name = './images/' + img_url.split('/')[-1]#获取到图片的url之后,接下来进行图片的存储
request.urlretrieve(url=img_url, filename=img_name)
执行,就可以得到images目录,同时存有下载的图片
二 bs4数据解析
2.1 基本使用
环境安装:
它是一个解析器,如果使用bs4进行数据解析,需要依靠lxml
root@darren-virtual-machine:~# pip3 install bs4
root@darren-virtual-machine:~# pip3 install lxml
导入bs4模块
from bs4 import BeautifulSoup
BeautifulSoup解析原理:
实例化一个BeautifulSoup对象,并将需要解析的页面源码数据加载到对象中
使用该对象的相关属性和方法进行数据解析或提取
如何实例化一个BeautifulSoup对象
本地加载
f = open()
soup = BeautifulSoup(f, "lxml")
网络加载
soup = BeautifulSoup(page_text, "lxml")
创建一个本地的测试html文件
root@darren-virtual-machine:~# cd /root/Python爬虫/
root@darren-virtual-machine:~/Python爬虫# vim test_page.html
测试bs4百里守约