社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

小小的python学习社 • 2 天前 • 29 次点击  

关注👆公众号、回复「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/181997
 
29 次点击