初识爬虫
总是听同学议论爬虫或者网上说爬虫多么多么厉害,那么首先要明白爬虫是要做什么。
那我就直观一点让你明白爬虫是做什么的
首先我相中了一个网站(你别想歪了)
http://desk.zol.com.cn/fengjing
这里面有大量的壁纸图片,我觉得都挺好看的,但是也不能每下载一张图片都要右键点击下载,那太慢了,那么如何快速高效的获取其中的所有图片呢?
这里就用到了爬虫技术,利用程序去获取web页面上自己想要的数据,也就是自动抓取数据。
通过代码可以获取到如下等图片(4秒可以获取全部图片)
当然爬虫不止能爬取图片,他可以爬取页面上的任何数据,包括但不限于图片,文字,视频,音频等等
接下来我们来研究如何用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是 <Response [200]> 代表响应成功
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标签的内容(一小部分)
<img alt="" height="32" src="https://icon.zol-img.com.cn/mainpage/2019logo/desk-logo.png" width="214"/>
<img alt="º£µ×ÊÀ½çΨÃÀ¸ßÇåͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/09/03/ChMkKV9oDOmIOMQFABGCahqhpY4AACkhgFWeR8AEYKC644.jpg" title="º£µ×ÊÀ½çΨÃÀ¸ßÇåͼƬ±ÚÖ½" width="208px"><span title="º£µ×ÊÀ½çΨÃÀ¸ßÇåͼƬ±ÚÖ½"><em>º£µ×ÊÀ½çΨÃÀ¸ßÇåͼƬ±ÚÖ½</em> (6ÕÅ)</span></img>
<img alt="ÃÀÀöÆÙ²¼Á÷Ë®·ç¾°Í¼Æ¬±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/0B/0E/ChMkKV9N5U2IfX_aAA-zeHRQZW8AABvcADsv-0AD7OQ688.jpg" title="ÃÀÀöÆÙ²¼Á÷Ë®·ç¾°Í¼Æ¬±ÚÖ½" width="208px"/>
<img alt="×ÔÈ»ÃÀ¾°Çåзç¹âÉãӰͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/08/02/ChMkKV9HFbKIftxRABrP0l2f-aAAABgfAI2-qwAGs_q680.jpg" title="×ÔÈ»ÃÀ¾°Çåзç¹âÉãӰͼƬ±ÚÖ½" width="208px"/>
<img alt="¾øÃÀɽˮ´ó×ÔÈ»·ç¾°¸ßÇåͼƬ±ÚÖ½" height="130px" src="https://b.zol-img.com.cn/desk/bizhi/image/10/208x130/1598319721647.jpg" title="¾øÃÀɽˮ´ó×ÔÈ»·ç¾°¸ßÇåͼƬ±ÚÖ½" width="208px"/>
<img alt="ƽ̹¿íÀ«µÄ¹«Â··ç¾°¸ßÇåͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/06/02/ChMkKV9DJxGIXuw5ACQ6GvesqmwAABYbwAAAAAAJDoy222.jpg" title="ƽ̹¿íÀ«µÄ¹«Â··ç¾°¸ßÇåͼƬ±ÚÖ½" width="208px"/>
<img alt="º£µ×DZˮ¸ßÇåͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/04/03/ChMkKV8_MTiIcYjfACeFgvgFKz0AABQxgEJGQwAJ4Wa694.jpg" title="º£µ×DZˮ¸ßÇåͼƬ±ÚÖ½" width="208px"/>
<img alt="׳¹ÛÐãÀöµÄ×ÔÈ»·ç¾°Í¼Æ¬±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/03/08/ChMkKV892yOIPO3lACMN9FNAbR8AABN4gD1blUAIw4M195.jpg" title="׳¹ÛÐãÀöµÄ×ÔÈ»·ç¾°Í¼Æ¬±ÚÖ½" width="208px"/>
<img alt="»ÄÄ®·ç¸ñ×ÀÃæ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g2/M00/06/0C/ChMlWlysEKmIUWFnAEWN61Ukuv0AAJVDAN_s9IARY4D228.jpg" title="»ÄÄ®·ç¸ñ×ÀÃæ±ÚÖ½" width="208px"/>
<img alt="º£ÃæÉϵÄϦÑôΨÃÀ·ç¾°Í¼Æ¬±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/08/0E/ChMkKV8qHTeIB3qfAA2E9csmhdgAAAjaAJPNFIADYUN780.jpg" title="º£ÃæÉϵÄϦÑôΨÃÀ·ç¾°Í¼Æ¬±ÚÖ½" width="208px"/>
<img alt="ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/07/0E/ChMkKV8ow_-IeS0KABnwKRyQfJwAAAfaACgGuIAGfBB853.jpg" title="ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½" width="208px"/>
<img alt="ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½" height="130px" src="https://desk-fd.zol-img.com.cn/t_s208x130c5/g6/M00/04/08/ChMkKV8iKtGIf2a0ABXFEb1V_98AAASCALDhsoAFcUp602.jpg" title="ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½" width="208px"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g6/M00/02/0B/ChMkKV9bL9SIGVb2AAdE5fuh4cwAACKbAB4y8AAB0T9674.jpg" title="¡¶Ñô¹â΢µ¡·" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g2/M00/07/0D/ChMlWl6V3ACIP-LYAAROAXsBf-UAAOUrgM_-rwABE4Z082.jpg" title="Äþ¾²µÄÎçºó" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g2/M00/02/01/ChMlWV6ClO-Id8njAAtkJ1AwkqUAAN9jwBhhvoAC2Q_769.jpg" title="Àö»¨Ó°" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g5/M00/0B/09/ChMkJ1aClEKIVzWEAAgqNx8xp3cAAGtkwG-TyEACCpP991.jpg" title="someone like you" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g2/M00/00/0F/ChMlWl7eNdOIE_UoAAMBjPzpCxQAAP42ACBHccAAwGk132.jpg" title="·ö²ÔɽÀöÓ°" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g3/M01/01/0A/ChMlV17tX5WIes7KAA_ikg80tWAAAU_2AA3tQsAD-Kq745.jpg" title="ɽ´åÃçÅ®" width="120"/>
<img height="90" srch="https://bbswater-fd.zol-img.com.cn/t_s120x90c5/g4/M01/01/0E/ChMlzF72HBuILd_tAAHehXDnv00AAYV-AAEs9wAAd6d897.jpg" title="Çå·çÖñÓ°" width="120"/>
好了,现在离成功很近了,因为我们找到了所有的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
于是就把所有的图片爬下来了,在image里面
免责声明,文章仅作为技术交流
http://网站/robots.txt文件中不允许爬行的地址禁止爬行,后果自负
requests的详细教程
https://segmentfault.com/a/1190000021725063
BeautifulSoup具体教程
https://wiki.jikexueyuan.com/project/python-crawler-guide/beautiful-soup.html