总是听同学议论爬虫或者网上说爬虫多么多么厉害,那么首先要明白爬虫是要做什么。
那我就直观一点让你明白爬虫是做什么的
首先我相中了一个网站(你别想歪了)
http://desk.zol.com.cn/fengjing
这里面有大量的壁纸图片,我觉得都挺好看的,但是也不能每下载一张图片都要右键点击下载,那太慢了,那么如何快速高效的获取其中的所有图片呢?
这里就用到了爬虫技术,利用程序去获取web页面上自己想要的数据,也就是自动抓取数据。
当然爬虫不止能爬取图片,他可以爬取页面上的任何数据,包括但不限于图片,文字,视频,音频等等
接下来我们来研究如何用python实现
先上代码
import requests
from bs4 import BeautifulSoup
import os
os.makedirs('./image/', exist_ok=True)
def urllib_download(url,i): #i是序号
r = requests.get(url) #请求图片
with open('./image/img'+str(i)+'.jpg', 'wb') as f: #打开./image/imgi.jpg
f.write(r.content) #把图片写入./img/imgi.jpg
if __name__ == "__main__":
target = 'http://desk.zol.com.cn/fengjing/' #定义目标网站地址
content = requests.get(url=target) #打印content是 代表响应成功
html = BeautifulSoup(content.text) #获取网站的html内容
imgs = html.find_all('img') #找到所有的img标签
j=0
for i in imgs:
url=i.get('src') if i.get('src') != None else i.get('srch')
urllib_download(url,j)
j=j+1
这里用到两个包,一个是requests,一个是BeautifulSoup
第一次使用需要下载两个包
pip install requests
pip install BeautifulSoup
requests的主要作用就是向服务器请求网页的页面,然后返回页面的html
BeautifulSoup的主要作用就是用来处理返回的html,用来筛选需要的内容,类似于css的选择器
(新手对于html和css自行百度)
解释代码
target = 'http://desk.zol.com.cn/fengjing/' #定义目标网站地址
content = requests.get(url=target) #打印content是 <Response [200]> 代表响应成功
html = BeautifulSoup(content.text) #获取网站的html内容
imgs = html.find_all('img') #找到所有的img标签
咱们先看看img标签的内容(一小部分)
º£µ×ÊÀ½çΨÃÀ¸ßÇåͼƬ±ÚÖ½ (6ÕÅ)
好了,现在离成功很近了,因为我们找到了所有的img标签
那么图片的地址是从img的src属性或者srch属性获取的,所以要截取其中的src或者srch部分
for i in imgs:
url = i.get('src') if i.get('src') != None else i.get('srch')
结果类似于
https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g4/M01/01/0E/ChMlzF72HBuILd_tAAHehXDnv00AAYV-AAEs9wAAd6d897.jpg
https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g6/M00/02/0B/ChMkKV9bL9SIGVb2AAdE5fuh4cwAACKbAB4y8AAB0T9674.jpg
https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g2/M00/02/01/ChMlWV6ClO-Id8njAAtkJ1AwkqUAAN9jwBhhvoAC2Q_769.jpg
这里用到了语法糖,是if else的简化版。如果i.get(‘src’)有内容那就i.get(‘src’)否则i.get(‘src’)是None的话就用get(‘srch’)
随便打开上面的一个网址
现在我们已经获取所有图片的所有地址了,于是接下来的问题就是下载图片然后保存到自己的电脑上
我们定义一个函数用来下载图片到特定位置
def urllib_download(url,i): #i是序号
r = requests.get(url) #请求图片
with open('./image/img'+str(i)+'.jpg', 'wb') as f: #打开./image/imgi.jpg
f.write(r.content) #把图片写入./img/imgi.jpg
然后每个页面的网址都调用这个函数
os.makedirs('./image/', exist_ok=True) #创建image文件夹
j=0
for i in imgs:
url=i.get('src') if i.get('src') != None else i.get('srch')
urllib_download(url,j)
j=j+1
运行命令: python3.8 你自己的文件名.py
免责声明,文章仅作为技术交流
http://网站/tobots.txt文件中不允许爬行的地址禁止爬行,后果自负
requests的详细教程
https://segmentfault.com/a/1190000021725063
BeautifulSoup具体教程
https://wiki.jikexueyuan.com/project/python-crawler-guide/beautiful-soup.html