
一、Python爬虫原理
如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;Python爬虫的核心原理是通过模拟浏览器的行为,自动访问目标网站,并抓取其中的数据。这个过程主要包括以下几个步骤:发送请求:使用Python中的第三方库(如requests)向目标网站发送HTTP请求,获取网页的HTML代码。解析网页:利用Python的解析库(如BeautifulSoup、lxml等)对获取的HTML代码进行解析,提取出所需的数据。存储数据:将解析得到的数据存储到本地文件、数据库或其他存储介质中,以便后续分析和处理。 本案例我就以 彼岸图网 这个网站做教程,原网址下方链接首先打开咋们的网站
我们右键选择检查
或者直接按F12
来到控制台
点击左上角的
箭头
或者快捷键ctrl+shift+c
,然后随便点在一张图片上面这时候我们就能看到这张图片的详细信息,src
后面的链接就是图片的链接,将鼠标放到链接上就能看到图片,这就是我们这次要爬的一、导入相关库(requests库)
requests翻译过来就是请求的意思,用来向某一网站发送请求
二、相关的参数(url,headers)
我们回到刚刚的控制台,点击上方的Network
,按下ctrl+r
刷新,随便点开一张图片这里我们只需要到两个简单的参数,本次案例只是做一个简单的爬虫教程,其他参数暂时不考虑url = "https://pic.netbian.com/uploads/allimg/210317/001935-16159115757f04.jpg"headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}
三、向网站发出请求
response = requests.get(url=url,headers=headers)print(response.text)
这时候我们会发现乱码?!!!!这其实也是很多初学者头疼的事情,乱码解决不难看着这些密密麻麻的一大片是不是感觉脑子要炸了,其实我们只需要找到我们所需要的就可以了四、匹配(re库,正则表达式)
正则表达式(Regular Expression)是一种强大的文本处理工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。简单来说,正则表达式就是用来搜索、匹配、替换或校验文本的模式。
正则表达式由普通字符(例如,字母a到z)和特殊字符(称为"元字符")组成。这些元字符包括:
- `.` 匹配任意单个字符(除了换行符)。
- `*` 表示前面的字符可以出现零次或多次。
- `+` 表示前面的字符至少出现一次。
- `?` 表示前面的字符可以出现零次或一次。
- `[]` 匹配括号内的任意一个字符。
- `|` 表示逻辑或。
- `\d` 匹配任意数字(等同于[0-9])。
- `\w` 匹配任意字母数字字符(等同于[a-zA-Z0-9_])。
- `\s` 匹配任意的空白符(包括空格、制表符、换行符等)。
使用正则表达式,你可以快速地从大量文本中提取出你想要的信息。例如,如果你想要匹配一个电子邮件地址,你可以使用以下正则表达式:
\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
这个表达式会匹配大多数电子邮件地址的格式。
在你提供的例子中,如果我们想要匹配图片信息,我们可以使用正则表达式来识别图片的URL模式。例如,如果我们想要匹配上述网页中的图片URL,我们可以使用以下正则表达式:
!\[img\]\(/uploads/allimg/\d{6}/\d{6}-\d+\.jpg\)
这个表达式会匹配形如 `` 的图片URL。这里的 `\d{6}` 匹配6位数字,`\d+` 匹配一个或多个数字,`.jpg` 匹配以`.jpg`结尾的字符串。
什么是正则表达式?简单点说就是由用户制定一个规则,然后代码根据我们指定的所规则去指定内容里匹配出正确的内容
我们在前面的时候有看到图片信息是什么样子的,根据信息我们可以快速找到我们要的接下来就是通过正则表达式把一个个图片的链接和名字给匹配出来,存放到一个列表中import re""". 表示除空格外任意字符(除\n外)* 表示匹配字符零次或多次? 表示匹配字符零次或一次.*? 非贪婪匹配"""
这样我们的链接和名字就存放到了image列表中了,通过打印我们可以看到以下内容
image[0]
:列表第一个元素,也就是链接和图片
image[0][0]
:列表第一个元素中的第一个值,也就是链接
image[0][1]
:列表第一个元素中的第二个值,也就是名字五、获取图片,保存到文件夹中(os库)
首先通过os库
创建一个文件夹(当前你也可以手动在脚本目录创建一个文件夹)import ospath = "彼岸图网图片获取"if not os.path.isdir(path): ok.mkdir(path)
# 对列表进行遍历for i in image: link = i[0] # 获取链接 name = i[1] # 获取名字 """ 在文件夹下创建一个空jpg文件,打开方式以 'wb' 二进制读写方式 @param res:图片请求的结果 """ with open(path+"/{}.jpg".format(name),"wb") as img: res = requests.get(link) img.write(res.content) # 将图片请求的结果内容写到jpg文件中 img.close() # 关闭操作 print(name+".jpg 获取成功······")
运行我们就会发现报错了,这是因为我们的图片链接不完整所导致的
我们回到图片首页网站,点开一张图片,我们可以在地址栏看到我们的图片链接缺少前面部分,我们复制下来 https://pic.netbian.com
在获取图片的发送请求地址前加上刚刚复制的https://pic.netbian.com
完整代码
import requestsimport reimport osurl = "https://pic.netbian.com/"headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}response = requests.get(url=url,headers=headers)response.encoding = response.apparent_encoding""". 表示除空格外任意字符(除\n外)* 表示匹配字符零次或多次? 表示匹配字符零次或一次.*? 非贪婪匹配"""parr = re.compile('src="(/u.*?)".alt="(.*?)"') # 匹配图片链接和图片名字image = re.findall(parr,response.text)path = "彼岸图网图片获取"if not os.path.isdir(path): # 判断是否存在该文件夹,若不存在则创建 os.mkdir(path) # 创建# 对列表进行遍历for i in image: link = i[0] # 获取链接 name = i[1] # 获取名字 """ 在文件夹下创建一个空jpg文件,打开方式以 'wb' 二进制读写方式 @param res:图片请求的结果 """ with open(path+"/{}.jpg".format(name),"wb") as img: res = requests.get("https://pic.netbian.com"+link) img.write(res.content) # 将图片请求的结果内容写到jpg文件中 img.close() # 关闭操作 print(name+".jpg 获取成功······")
三、注意事项与总结
在使用Python爬虫时,我们需要注意以下几点:
遵守robots.txt协议:在爬取网站数据时,要遵守目标网站的robots.txt协议,避免对网站造成不必要的负担。
设置合理的请求频率和间隔时间:为了避免对目标网站造成过大的压力,我们需要设置合理的请求频率和间隔时间。
处理反爬虫机制:一些网站会采用反爬虫机制来防止数据被抓取,我们需要采取相应的措施来绕过这些机制。
尊重数据版权:在爬取和使用数据时,要尊重数据的版权和隐私,避免侵犯他人的权益。
以上就是今天给你分享的内容,觉得有用的话欢迎点赞收藏哦!
如果你也对Python这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)3.在后台发送:“python” 即可领取资料福利/开通上课权限领取2024年最新Python零基础学习资料,
后台回复:python