爬取美少女图片
admin
2023-07-30 20:46:01
0

清明节宅在家里,学爬虫,试着用python爬取www.meizitu.com这个网站中的美少女图片。用了python3以及requests,BeautifulSoup,multiprocessing这些包。

1.尝试分析,得到图片url

首先打开该网站,点击右键,查看网页源代码。或者通过requests查看首页内容。

import requests

from bs4 import BeautifulSoup

url=\’www.meizitu.com\’

response=requests.get(url)

soup=BeautifulSoup(response.content,\’lxml\’)

分析soup,我们看到其中有图片的连接,还有连接到其他网页的url,通过BeautifulSoup得到他们(BeautifulSoup的介绍,请看Beautiful Soup 4.2.0 文档

webs=soup.find_all(\’a\’,target=\’_blank\’)

此时webs类似list,能通过index来调用其中的元素,而每一个元素都类似字典

webs[0][\’href\’]#得到url

而经过分析,我们知道,图片的url能通过类似方法获得

soup.find_all(\’img\’)[0][\’src\’]

2.尝试保存图片

photoUrl=\’http://pic.meizitu.com/upload/article/2016a/02/26/01.jpg\’

photo = requests.get(pict_url)

with open(,\’wb\’) as newfile:  #图片输出

    newfile.write(picture.content)

另外我们发现所以图片的url都是统一的命名格式,所以我们可以通过拆解图片的url提取字符串作为图片名称

photoStoreName=photoUrl.split(\’uploads\’)[1]

保存图片

with open(photoStoreName,\’wb\’) as newfile:  #图片输出

     newfile.write(photo.content)

3.整体框架

用伪代码将整个爬虫框架BFS介绍下:

stack=deque() #deque来自collections这个包,将还没爬过的url加入其中

nameSet=set()  #将保存过的图片加入其中

visited=set() #将已经爬过的网页url加入其中

while stack: 

    url=stack.popleft()

    response =requests.get(url)

    visited.add(url)

    soup= BeautifulSoup(response.content,\’lxml\’)

    分析soup,得到网页url还有图片,如果网页url不在visited中,则加入stack;如果图片的名称不在nameSet中,则保存图片,并将该名字加入nameSet

4.多进程

前三步其实已经可以爬取图片了,但是图片非常多(我自己由于网速限制,没爬完,只爬了6000多张,已经营养不良了),所以采取多进程的方法来爬。python的multiprocessing的pool,非常好用。

5. 最后代码

GitHub – jinxin0924/Crawler

有V1,V2,V3三个版本,V1简单实现了爬取图片,V2实现了单线程爬取全部图片,V3实现了多进程爬取全部图片。V3多进程的实现,应该还存在点小问题,如果各位有什么想法,欢迎私信联系我。

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...