作为一个python新入门小白,突然就想发个博客,一方面为了记录学习历程,一方面能分享给新入门的同学经验,更多的是想和大家一起学习和交流。以下是我以小白的角度分享的爬虫的相关知识和一个简单的爬取网页图片的实例(大家都喜欢看的那种)
小白可以在文章后面先了解完什么是爬虫后,然后我们来动手写一个实例,代码是枯燥的,但我们可以找我们感兴趣的网站和图片进行爬取,博主在这里选择爬取一组美女的写真照片 (仅用来教学哈)
1.实例上手(附详细注释)
算法过程:进入目标网站,打开检查元素界面,在里面可以找到我们想用的信息,比如请求方式(有get和post请求),和一些请求中的参数,了解到信息后我们查看页面源代码,找到存储照片的标签并查看规律,以便我们用正则提取我们想要的数据,本案例为图片的src地址,再用content方法获取图片的二进制形式的数据,最后将图片写入我们指定路径。(需要注意的是图片路径得不同,相同路径只能存放一个图片,博主在这坑了好几次,在这里博主选择用num来控制路径)
小拓展:
这里我们可以修改请求的参数值来获取更多内容,也可以更改下网页的url和对应的正则表达式来爬取其他网页的图片
开始:我们先导入需要的包
import requests # python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高
import re # 正则解析数据需要用到
import os # 用来建立文件夹存放爬取到的图片
if __name__ == '__main__':
# 创建一个文件夹,保存所有图片
if not os.path.exists('./p'):
os.mkdir('./p')
url = 'https://www.soumeitu.com/mt/ugirls.html'
# 进行UA伪装,让我们的请求伪装成浏览器对网站进行访问
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36 Edg/94.0.992.38'}
# 使用通用爬虫对url对应的一整张页面进行爬取
page_text = requests.get(url=url, headers=headers).text
# 使用聚焦爬虫将页面中所有的糗图进行解析/提取(正则)
ex = '<div class="post-thumb">.*?<img src="(.*?)" alt.*?</div>'
img_src_list = re.findall(ex, page_text, re.S) # 参数1为正则,参数二为正则作用的文档,re.S和re.M分别为单行匹配和多行匹配
print(len(img_src_list)) # 打印当前列表中地址个数
num = 0 # 这里的num用于给照片起名字
# 加下来就是遍历列表并把它按照指定路径存储了
for src in img_src_list:
num = num + 1
n = str(num)
img_data = requests.get(url=src, headers=headers).content
img_name = n + '.jpg' # 照片名称
imgPath = './q/' + img_name # 存储路径
with open(imgPath, 'wb') as fp:
fp.write(img_data)
print(img_name, '下载成功!')
获得的图片可以在本地文件夹中打开
2.爬虫的基本知识
爬虫在使用场景中的分类
-
通用爬虫:抓取系统重要组成部分(整张页面爬取)
-
聚焦爬虫:是建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容
-
增量式爬虫:检测网站中数据更新的情况,只会爬取网站中最新更新出来的数据
http协议
-
概念:就是服务器和客户端进行数据交互的一种形式
常用请求头信息:
-
User-Agent:请求载体的身份标识
-
Connection:请求完毕后是断开连接还是保持连接
常用响应头信息:
-
Content-Type:服务器响应客户端的数据类型
https协议:
-
安全的超文本传输协议
加密方式:
-
对称密钥加密
-
非对称密钥加密
-
证书密钥加密
requests模块
-
urllib模块
-
requests模块
get和post请求
-
requests中两种不同的请求,差异可以去了解一下
requests模块:
python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高
作用:模拟浏览器发请求
如何使用:(requests模块的编码流程)
-
指定url
-
UA检测
-
UA伪装
-
-
发起请求
-
获取响应数据
-
持久化存储
环境安装:
博主在这里推荐pycharm,界面比较传统,比较简单和方便,可以官网进行下载社区版
实战编码
在这里放上最原始的爬取搜狗首页的数据代码
-
需求:爬取搜狗首页的页面数据
代码:
# 爬取搜狗首页的页面数据 import requests if __name__ == "__main__": # 指定url url = 'https://www.sogou.com/' # 发起请求 # get方法会返回一个响应对象 response = requests.get(url=url) # 获取响应数据,text返回的是字符串形式的响应数据 page_text = response.text print(page_text) # 持久化存储 with open('./sougou.html', 'w', encoding='utf-8') as fp: fp.write(page_text) print("爬取数据结束")