初识爬虫1(详解)

初识爬虫

总是听同学议论爬虫或者网上说爬虫多么多么厉害,那么首先要明白爬虫是要做什么。

那我就直观一点让你明白爬虫是做什么的
首先我相中了一个网站(你别想歪了)
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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值