初识爬虫1(详解)

初识爬虫

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

那我就直观一点让你明白爬虫是做什么的
首先我相中了一个网站(你别想歪了)
http://desk.zol.com.cn/fengjing



这里面有大量的壁纸图片,我觉得都挺好看的,但是也不能每下载一张图片都要右键点击下载,那太慢了,那么如何快速高效的获取其中的所有图片呢?

这里就用到了爬虫技术,利用程序去获取web页面上自己想要的数据,也就是自动抓取数据。

通过代码可以获取到如下等图片(4秒可以获取全部图片)
初识爬虫1(详解)_第1张图片

初识爬虫1(详解)_第2张图片
初识爬虫1(详解)_第3张图片
当然爬虫不止能爬取图片,他可以爬取页面上的任何数据,包括但不限于图片,文字,视频,音频等等

接下来我们来研究如何用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ÕÅ)
ÃÀÀöÆÙ²¼Á÷Ë®·ç¾°Í¼Æ¬±ÚÖ½
×ÔÈ»ÃÀ¾°Çåзç¹âÉãӰͼƬ±ÚÖ½
¾øÃÀɽˮ´ó×ÔÈ»·ç¾°¸ßÇåͼƬ±ÚÖ½
ƽ̹¿íÀ«µÄ¹«Â··ç¾°¸ßÇåͼƬ±ÚÖ½
º£µ×DZˮ¸ßÇåͼƬ±ÚÖ½
׳¹ÛÐãÀöµÄ×ÔÈ»·ç¾°Í¼Æ¬±ÚÖ½
»ÄÄ®·ç¸ñ×ÀÃæ±ÚÖ½
º£ÃæÉϵÄϦÑôΨÃÀ·ç¾°Í¼Æ¬±ÚÖ½
ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½
ÃÀÀöµÄÀ¶Ìì°×ÔƷ羰ͼƬ±ÚÖ½







好了,现在离成功很近了,因为我们找到了所有的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’)

随便打开上面的一个网址
初识爬虫1(详解)_第4张图片
现在我们已经获取所有图片的所有地址了,于是接下来的问题就是下载图片然后保存到自己的电脑上
我们定义一个函数用来下载图片到特定位置

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里面
初识爬虫1(详解)_第5张图片

免责声明,文章仅作为技术交流
http://网站/tobots.txt文件中不允许爬行的地址禁止爬行,后果自负

requests的详细教程
https://segmentfault.com/a/1190000021725063
BeautifulSoup具体教程
https://wiki.jikexueyuan.com/project/python-crawler-guide/beautiful-soup.html

你可能感兴趣的:(爬虫,python,python)