在如今这个数据庞大的时代,我们经常需要获取各种数据,这时候学习一个爬虫技术就显得很重要了。爬虫技术可以帮助我们自动化地获取网站数据,并将其存储到本地。

接下来我们将通过爬取一个网站图片的例子来学习 python 爬虫。

简介

爬虫是一种自动化程序,用于从互联网上抓取数据。它模拟人类浏览网页的行为,通过发送 HTTP 请求获取网页内容,然后解析网页结构,提取所需的信息。爬虫技术广泛应用于数据挖掘、信息收集、搜索引擎索引等领域。

其实爬虫这个技术我觉得个人的话是不好拿来赚钱的,比如你爬取了一个网站的所有视频,然后你能干嘛呢,做一个视频平台,有人看吗?爬虫赚钱无非就是两种,一种是教别人爬虫来赚钱,另一种是你能通过爬取到的数据进行变现

就我们个人来说,数据变现是有一定难度的。所以爬虫一般只是用于提升我们的工作和生活效率,获取对于我们有利的东西,比如你要写文章,可以获取一个网站的所有评论,获取大众的对某个话题的评论,来给自己一点写作的方向和灵感,获取爬取一些招聘网站的信息,来获取目前所有招聘信息

然后就是不一定要用 python 来实现爬虫,单纯只是 python 实现起来会比较简单,只要你的编程语言甚至是一个工具能够发送网络请求,就可以实现爬虫

接着我们开始实现使用 python 爬取网站图片

准备

电脑得有一个 python3.0 以上的环境并安装 request 库和 lxml 库

运行以下命令安装一下 request 和 lxml

request 是发送网络请求的,lxml 是用于提取网页数据的

1
2
pip install requests
pip install lxml

然后确定一个你要爬取的网站,这里以彼岸图网为例

流程

我们先明白一下爬取网站图片的原理,我们得先获取网页的源代码,只需要发送一个简单的网络请求网站就可以拿到,然后我们知道网站的图片绝大部分都是一个 img 标签,img 标签里面有一个 src 地址,指向的是这个图片的资源地址,如果我们想获取这个图片,只需要请求这个资源地址就可以拿到图片的内容,那么不难总结我们的流程

  1. 获取网站的源代码
  2. 解析源代码,获取所有 img 标签的 src 地址
  3. 请求每个 src 地址,获取图片的内容
  4. 将图片内容写到文件里面并保存到本地

实现

首先导入需要的库,request,lxml 中的 etree 和 os

os 是用于创建目录的,我们先将爬取到的图片存放到本地的一个文件夹中

根据上述的流程我们可以编写代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import requests
import os

from lxml import etree

url = 'https://pic.netbian.com/4kmeinv/' # 网页地址

baseUrl = 'https://pic.netbian.com' # 图片前缀地址

response = requests.get(url).content # 获取网页的源代码

html_content = etree.HTML(response) # 将网页源代码转换成一个dom树

image_urls = html_content.xpath('//ul/li/a/img/@src') # 获取网页里面所有img标签的src属性值
image_names = html_content.xpath('//ul/li/a/img/@alt') # 获取网页里面所有图片的名字

# 如果不存在目录就创建
if not os.path.exists('./女神图片'):
os.mkdir('./女神图片')

# 循环所有图片的src地址和名字
for u, n in zip(image_urls, image_names):
print(f"图片名字: {n},url地址: {baseUrl + u}")
image_content = requests.get(baseUrl + u).content # 获取图片的内容
with open(f"./女神图片/{n}.jpg", 'wb') as beauty_img:
beauty_img.write(image_content) # 将内容写到一个文件中

运行代码查看结果

网站预览

只需要十几行代码就可以爬取一个网站的图片,爬虫并没有那么复杂,我们平时刷视频看到的那些博主在电脑前运行个代码就抓取各种数据,其实背后就是十几行简单的代码,看起来高大上其实很简单

建议

但是爬虫其实只是入门极其简单,你要是继续深入的话,会变得越难越复杂

现在很多网站都做了反爬措施,我们如果像上面的代码那样直接爬取不行的,一般我们需要模拟浏览器的请求头,伪装成浏览器,这样网站才会认为我们是正常用户,才能正常访问,或者他们的接口你得登录之后才能调用,你还得使用 cookie 模拟一个已经登录的状态

请求头类似于这样,可能要带上 cookie 和一些其他信息,具体要看网站的反爬措施策略

1
2
3
4
5
6
7
8
9
10
11
12
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) "
"Version/16.1 Safari/605.1.15 ",
'Cookie': 'Hm_lpvt_c59f2e992a863c2744e1ba985abaea6c=1686552810; '
'Hm_lvt_c59f2e992a863c2744e1ba985abaea6c=1686550900; '
'__yjs_duid=1_9d9c933aaf2989594d4ddae469a59d771686550899444; zkhanecookieclassrecord=%2C54%2C ',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Host': 'pic.netbian.com',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Connection': 'keep-alive'
}

或者他们的数据接口是隐藏的,你得自己通过抓取网络请求去一个个找,甚至有时候还需要用到 js 逆向工程去解析,这个过程是很复杂且耗时间的

所以如果你不是很想深入学习爬虫,简单学一点就完全够用了,大部分的网站靠上面的代码都能爬取

尾声

我这里这是带你简单了解一下爬虫,如果想要深入了解,可以看 b 站上的免费课程,直接搜 python 爬虫就行,找个播放量最多的就好,b 站的教学视频完全够用了,因为爬虫本身并没多难,就是发网络请求拿数据,然后对数据处理一下再保存,真正难的是创意、变现和具体功能实现