基于Python语言的小型网络爬虫

一、概念介绍

1、网络爬虫:又称为网络蜘蛛或网络机器人,网络爬虫本质上是一段计算机程序或脚本,其按照一定的逻辑和算法规则自动地抓取和下载万维网的网页,是搜索引擎的一个重要组成部分。网络爬虫通过统一资源定位符URL来查找目标网页,将用户所关注的数据内容直接返回给用户,并不需要用户以浏览网页的形式去获取信息,为用户节省了时间和精力,并提高了数据采集的准确度,使用户在海量数据中游刃有余。网络爬虫的最终目的就是从网页中获取自己所需的信息。
2、网络爬虫由控制节点、爬虫节点、资源库构成。下图所示是网络爬虫的控制节点和爬虫节点的结构关系:
在这里插入图片描述
可以看到,网络爬虫中可以有多个控制节点,每个控制节点下可以有多个爬虫节点,控制节点之间可以互相通信,同时,控制节点和其下的各爬虫节点之间也可以进行互相通信,属于同一个控制节点下的各爬虫节点间,亦可以互相通信。
控制节点,也叫作爬虫的中央控制器,主要负责根据URL地址分配线程,并调用爬虫节点进行具体的爬行。
爬虫节点会按照相关的算法,对网页进行具体的爬行,主要包括下载网页以及对网页的文本进行处理,爬行后,会将对应的爬行结果存储到对应的资源库中。

二、设计思路

1、首先对于本次简单设计我针对的是利用网络爬虫爬取糗事百科网站中显示的出的所有糗图。
2、网络爬虫的设计架构主要分五个模块:调度模块,URL管理模块,下载模块,内容分析模块,数据存储模块。
3、各个模块的功能:
调度模块:用来做各个模块调度。
URL管理模块:管理已经下载过url和没有下载url。
下载模块:下载内容。
内容分析模块:分析分离需要下载url和重要内容。
数据存储模块:保存重要内容数据。
4、实现网络爬虫的设计架构流程:
在这里插入图片描述

三、详细设计内容

本次设计内容主要是基于python语言利用网络爬虫对糗事百科网站上的图片的批量爬取;
来看一下简单的步骤:
1.先是引入requestsreos这三个所需的模块:
在这里插入图片描述
2.创建一个文件夹来保存爬取到的图片:
在这里插入图片描述
3.模拟浏览器头部信息,向糗事服务器发送请求信息:
在这里插入图片描述
4.之后使用通用爬虫对url对应的一整张页面进行爬取:
在这里插入图片描述
5.使用聚焦爬虫将页面中的所有糗图进行解析/获取并保存:
在这里插入图片描述
6.拼接出一个完整的图片url及请求到图片的二进制数据并生成图片的名称:
在这里插入图片描述
7.最后将所有的图片存储到前面创建的文件夹中:
在这里插入图片描述

四、效果演示及代码

1、首先是对糗事百科网站上的糗图的批量爬取结果演示,下图是本次演示需要爬取的网页,往下滑动有很多图片,图中显示的是第一张糗图:
在这里插入图片描述
2、我们提取其网址用我们的爬虫程序进行爬取:
在这里插入图片描述
3、运行程序爬取成功的图片展示:
在这里插入图片描述
我们可以看到爬虫自动将目标网页上的所有糗图都爬取了下来并自动保存到了新建的文件夹下面。

最后附上糗事百科官网,大家可以试试爬取该网站上的图片:糗事百科
相关代码(本次简单的爬虫设计是我在B站上面自学自写的,如有问题请谅解):

import requests
import re
import os

if not os.path.exists('./爬取的图片'):
    os.mkdir('./爬取的图片')
url='https://www.qiushibaike.com/imgrank/
headers = {  # 模拟浏览器头部信息,向糗事服务器发送消息
    "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"
}
#使用通用爬虫对url对应的一整张页面进行爬取
page_text = requests.get(url=url,headers=headers).text
#使用聚焦爬虫将页面中的所有糗图进行解析/获取
ex ='<div class="thumb">.*?<img src="(.*?)" alt.*?</div>'

img_src_list =re.findall(ex,page_text,re.S)

for src in img_src_list:
    #拼接出一个完整的图片url
    src = 'https:'+src
    #请求到了图片的二进制数据
    img_data = requests.get(url=src,headers=headers).content
    #生成图片名称
    img_name = src.split('/')[-1]
    #图片存储的路径
    imgPath = './爬取的图片/'+img_name
    with open(imgPath,'wb') as fp:
        fp.write(img_data)
        print(img_name,'爬取成功!')
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值