Py学习  »  Python

Python爬虫小白入门教程,学不会我给你刷鞋

小小的python学习社 • 5 天前 • 27 次点击  

关注👆公众号、回复「python」领零基础教程!

一、Python爬虫原理

1、爬虫是什么?
如果我们把互联网比作一张大的蜘蛛网,数据便是存放于蜘蛛网的各个节点,而爬虫就是一只小蜘蛛,沿着网络抓取自己的猎物(数据)爬虫指的是:向网站发起请求,获取资源后分析并提取有用数据的程序。
从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用;
2、爬虫的基本流程
Python爬虫的核心原理是通过模拟浏览器的行为,自动访问目标网站,并抓取其中的数据。这个过程主要包括以下几个步骤:
发送请求:使用Python中的第三方库(如requests)向目标网站发送HTTP请求,获取网页的HTML代码。
解析网页:利用Python的解析库(如BeautifulSoup、lxml等)对获取的HTML代码进行解析,提取出所需的数据。
存储数据:将解析得到的数据存储到本地文件、数据库或其他存储介质中,以便后续分析和处理。 
二、python爬虫实战
本案例我就以 彼岸图网 这个网站做教程,原网址下方链接
https://pic.netbian.com/

首先打开咋们的网站

可以看到有很多好看的图片,一页总共21张图片
我们右键选择检查或者直接按F12来到控制台

点击左上角的箭头或者快捷键ctrl+shift+c ,然后随便点在一张图片上面
这时候我们就能看到这张图片的详细信息,src后面的链接就是图片的链接,将鼠标放到链接上就能看到图片,这就是我们这次要爬的

一、导入相关库(requests库)

import 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) # 打印请求成功的网页源码,和在网页右键查看源代码的内容一样的
这时候我们会发现乱码?!!!!这其实也是很多初学者头疼的事情,乱码解决不难
# 通过发送请求成功response,通过(apparent_encoding)获取该网页的编码格式,并对response解码response.encoding = response.apparent_encodingprint(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\)

这个表达式会匹配形如 `![img](/uploads/allimg/240919/203723-17267494434c31.jpg)` 的图片URL。这里的 `\d{6}` 匹配6位数字,`\d+` 匹配一个或多个数字,`.jpg` 匹配以`.jpg`结尾的字符串。

什么是正则表达式?简单点说就是由用户制定一个规则,然后代码根据我们指定的所规则去指定内容里匹配出正确的内容

我们在前面的时候有看到图片信息是什么样子的,根据信息我们可以快速找到我们要的
接下来就是通过正则表达式把一个个图片的链接和名字给匹配出来,存放到一个列表中
import re""". 表示除空格外任意字符(除\n外)* 表示匹配字符零次或多次? 表示匹配字符零次或一次.*? 非贪婪匹配"""# src后面存放的是链接,alt后面是图片的名字# 直接(.*?)也是可以可以直接获取到链接,但是会匹配到其他不是我们想要的图片# 我们可以在前面图片信息看到链接都是/u····开头的,所以我们就设定限定条件(/u.*?)这样就能匹配到我们想要的parr = re.compile('src="(/u.*?)".alt="(.*?)"')image = re.findall(parr,response.text)for content in image:    print(content)
这样我们的链接和名字就存放到了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
运行,OK,获取完毕

完整代码

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这门编程感兴趣的话,欢迎加入我们。(小白也可以参加)
1.关注下方公众号↓↓↓↓
2.点赞+再看
3.在后台发送:“python” 即可领取资料福利/开通上课权限
领取2024年最新Python零基础学习资料,后台回复:python

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/183538
 
27 次点击