妹子图网站----前言

从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情。希望可以做好。

为了写好爬虫,我们需要准备一个火狐浏览器,还需要准备抓包工具,抓包工具,我使用的是CentOS自带的tcpdump,加上wireshark ,这两款软件的安装和使用,建议你还是学习一下,后面我们应该会用到。

妹子图网站---- 网络请求模块requests

Python中的大量开源的模块使得编码变的特别简单,我们写爬虫第一个要了解的模块就是requests。

妹子图网站---- 安装requests

打开终端:使用命令

pip3 install requests

等待安装完毕即可使用

接下来在终端中键入如下命令

# mkdir demo

上面的linux命令是 创建一个名称为demo的文件夹,之后创建一个

为了提高在linux上的开发效率,我们需要安装一个visual studio code 的开发工具

对于怎么安装vscode,参考官方的https://code.visualstudio.com... 有详细的说明。

对于centos则如下:

sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc

然后用yum命令安装

yum check-update

安装成功之后,在你的CentOS中会出现如下画面

image.png

接着说我们上面的操作 ,因为我们这边是用gnome图形界面,所以后面的有些操作,我直接用windows的操作风格讲解了

打开软件>文件>打开文件>找到我们刚刚创建的down.py文件

之后,在VSCODE里面输入

import requests #导入模块

tips:本教程不是Python3的基础入门课,所以有些编码基础,默认你懂,比如Python没有分号结尾,需要对齐格式。我会尽量把注释写的完整

按键盘上的ctrl+s保存文件,如果提示权限不足,那么按照提示输入密码即可

通过终端进入demo目录,然后输入

python3 down.py

显示如下结果,代表编译没有问题

[root@bogon demo]# python3 down.py

接下来,我们开始测试requests模块是否可以使用

修改上述代码中的

import requests

运行结果(出现下图代表你运行成功了):

image.png

接下来,我们实际下载一张图片试试,比如下面这张图片

image.png

修改代码,在这之前,我们修改一些内容

由于每次修改文件,都提示必须管理员权限,所以你可以使用linux命令修改权限。

[root@bogon linuxboy]# chmod -R 777 demo/

import requests

运行代码之后,发现在文件夹内部生成了一个文件

image.png

但是打开文件之后发现,这个文件并不能查阅,这代表这个文件压根没有下载下来

image.png

我们继续修改代码,因为有的服务器图片,都做了一些限制,我们可以用浏览器打开,但是使用Python代码并不能完整的下载下来。

修改代码

import requests

好了,这次在终端编译一下python文件

python3 down.py

发现图片下载下来了

image.png

我们重点查看上述代码中 requests.get部分,添加了一个headers的实参。这样我们程序就下载下来了完整的图片。

妹子图网站---- Python爬虫页面分析

有了上面这个简单的案例,我们接下来的操作就变的简单多了。爬虫是如何进行的呢?

输入域名->下载源代码->分析图片路径->下载图片

上面就是他的步骤

输入域名

为啥爬取这个网站,因为好爬。

好了,接下来分析这个页面

image.png

做爬虫很重要的一点,就是你要找到分页的地方,因为有分页代表着有规律,有规律,我们就好爬了(可以做的更智能一些,输入首页网址,爬虫自己就能分析到这个网站中的所有地址)

上面图片中,我们发现了分页,那么找规律吧

image.png

使用火狐浏览器的开发者工具,发现分页规律

http://www.meizitu.com/a/pure_1.html

好了,接下来用Python实现这部分(以下写法有部分面向对象的写法,没有基础的同学,请百度找些基础来看,不过对于想学习的你来说,这些简单极了)

import requests

上面的代码,可能需要有一定的Python基础可以看懂,不过你其实仔细看一下,就几个要点

第一个是 class Spider(): 我们声明了一个类,然后我们使用 def __init__去声明一个构造函数,这些我觉得你找个教程30分钟也就学会了。

拼接URL,我们可以用很多办法,我这里用的是最直接的,字符串拼接。

注意上述代码中有一个全局的变量 all_urls 我用它来存储我们的所有分页的URL

接下来,是爬虫最核心的部分代码了

我们需要分析页面中的逻辑。首先打开 http://www.meizitu.com/a/pure... ,右键审查元素。

image.png

image.png

发现上图红色框框里面的链接

点击图片之后,发现进入一个图片详情页面,发现竟然是一组图片,那么现在的问题是

这里我们采用多线程的方式爬取(这里还用了一种设计模式,叫观察者模式)

import threading #多线程模块

首先引入三个模块,分别是多线程,正则表达式,时间模块

新增加一个全局的变量,并且由于是多线程操作,我们需要引入线程锁

all_img_urls = [] #图片列表页面的数组

声明一个生产者的类,用来不断的获取图片详情页地址,然后添加到 all_img_urls 这个全局变量中

#生产者,负责从每个页面提取图片列表链接

线程锁,在上面的代码中,当我们操作all_urls.pop()的时候,我们是不希望其他线程对他进行同时操作的,否则会出现意外,所以我们使用g_lock.acquire()锁定资源,然后使用完成之后,记住一定要立马释放g_lock.release(),否则这个资源就一直被占用着,程序无法进行下去了。

匹配网页中的URL,我使用的是正则表达式,后面我们会使用其他的办法,进行匹配。

re.findall()方法是获取所有匹配到的内容,正则表达式,你可以找一个30分钟入门的教程,看看就行。

代码容易出错的地方,我放到了

try: except: 里面,当然,你也可以自定义错误。

如果上面的代码,都没有问题,那么我们就可以在程序入口的地方编写

for x in range(2):

执行程序,因为我们的Producer继承自threading.Thread类,所以,你必须要实现的一个方法是 def run 这个我相信在上面的代码中,你已经看到了。然后我们可以执行啦~~~

运行结果:

image.png

这样,图片详情页面的列表就已经被我们存储起来了。

接下来,我们需要执行这样一步操作,我想要等待图片详情页面全部获取完毕,在进行接下来的分析操作。

这里增加代码

#threads= []

注释关键代码,运行如下

[linuxboy@bogon demo]$ python3 down.py

把上面的tt.join等代码注释打开

[linuxboy@bogon demo]$ python3 down.py

发现一个本质的区别,就是,我们由于是多线程的程序,所以,当程序跑起来之后,print("进行到我这里了")不会等到其他线程结束,就会运行到,但是当我们改造成上面的代码之后,也就是加入了关键的代码 tt.join() 那么主线程的代码会等到所以子线程运行完毕之后,在接着向下运行。这就满足了,我刚才说的,先获取到所有的图片详情页面的集合,这一条件了。

join所完成的工作就是线程同步,即主线程遇到join之后进入阻塞状态,一直等待其他的子线程执行结束之后,主线程在继续执行。这个大家在以后可能经常会碰到。

下面编写一个消费者/观察者,也就是不断关注刚才我们获取的那些图片详情页面的数组。

添加一个全局变量,用来存储获取到的图片链接

pic_links = [] #图片地址列表

#消费者

看到没有,上面的代码其实和我们刚才写的极其相似,后面,我会在github上面把这部分代码修改的更加简洁一些,不过这才是第二课,后面我们的路长着呢。

代码中比较重要的一些部分,我已经使用注释写好了,大家可以直接参考。大家一定要注意我上面使用了两个正则表达式,分别用来匹配title和图片的url这个title是为了后面创建不同的文件夹使用的,所以大家注意吧。

#开启10个线程去获取链接

运行结果:

[linuxboy@bogon demo]$ python3 down.py

是不是感觉距离成功有进了一大步

接下来就是,我们开篇提到的那个存储图片的操作了,还是同样的步骤,写一个自定义的类

class DownPic(threading.Thread) :

我们获取图片链接之后,就需要下载了,我上面的代码是首先创建了一个之前获取到title的文件目录,然后在目录里面通过下面的代码,去创建一个文件。

涉及到文件操作,引入一个新的模块

import os #目录操作模块

# 遍历字典列表

因为我们的图片链接数组,里面存放是的字典格式,也就是下面这种格式

[{"妹子图1":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]},{"妹子图2":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]},{"妹子图3":["http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/01.jpg","http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/02.jpg"."http://mm.chinasareview.com/wp-content/uploads/2016a/08/24/03.jpg"]}]

需要先循环第一层,获取title,创建目录之后,在循环第二层去下载图片,代码中,我们在修改一下,把异常处理添加上。

try:

然后在主程序中编写代码

#开启10个线程保存图片

运行结果:

[linuxboy@bogon demo]$ python3 down.py

文件目录下面同时出现

image.png

点开一个目录

image.png

好了,今天的一个简单的爬虫成了

最后我们在代码的头部写上

# -*- coding: UTF-8 -*-

推荐一下我建的python学习交流qun:850973621,群里有项目源码分享,开发工具、

电子书籍、免费的视频教程分享。可以加入一起交流学习,一起进步!

学习资料

python下载图片的命令_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...相关推荐

  1. android怎么让图片显示在button上面_网上的图片不知道怎么批量下载?python教你怎么把网站上面的图片都爬下来...

    ## **妹子图网站----前言** 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写`爬图片`这一件事情.希望可以做好. 为 ...

  2. python下载b站视频_爬虫可以当是一个批量下载工具!用Python批量下载B站视频

    说起B站,肯定人人都知道吧,B站的反扒机制并不是太严格,所以今天我准备给大家说说我能想到的几种方式,目前大概想到了三种方式: 1.模拟手机端请求,视频链接就添加在源码中.(最简单.但清晰度不好) 2. ...

  3. python爬取汽车之家_python爬虫实战之爬取汽车之家网站上的图片

    随着生活水平的提高和快节奏生活的发展.汽车开始慢慢成为人们的必需品,浏览各种汽车网站便成为购买合适.喜欢车辆的前提.例如汽车之家网站中就有最新的报价和图片以及汽车的相关内容,是提供信息最快最全的中国汽 ...

  4. 网站图片多服务器选多大,网站上的图片一般多大合适

    网站上的图片一般多大合适 内容精选 换一换 安装了SSL证书后,访问网站时,HTTPS比HTTP要多几次握手的时间,HTTPS协议握手阶段比较费时,同时还要进行RSA校验,因此使用了SSL证书后,相较 ...

  5. php获取远程网页地址吗,php怎么获取远程网站上的图片的地址?有什么思路吗?...

    php怎么获取远程网站上的图片的地址?有什么思路吗? 比如获取百度的背景图片的路径 https://ss0.baidu.com/7Po3dSag_xI4khGko9WTAnF6hhy/super/cr ...

  6. 如何将网页保存为图片_如何用浏览器插件一键批量下载网页图片?

    如果你看到一个网页上的图片想要全部下载下来,你是如何下载的?一个一个下载太慢了,并且有的图片还有水印,没有水印的不让你下载,比如,阿里巴巴里的产品详情页.那么,有什么办法能一键下载网页上的图片呢?准备 ...

  7. python怎样执行curl命令_如何使用python执行curl命令

    如何使用python执行curl命令 我想在python中执行curl命令. 通常,我只需要在终端输入命令并按回车键. 但是,我不知道它在python中是如何工作的. 该命令如下所示: curl -d ...

  8. python如何创建工程预设_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...

    问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...

  9. java随机抓取网站上的图片_抓取一个网站特定的全部图片(JAVA)

    1. 目的 用五笔时,如果碰到不会拆的字,只好换回拼音.但这样做治标不治本,于是到网上找五笔反查工具.最后发现一个不错的网站--不仅有每个字对应的五笔码,还有其字根图.可惜的是,这是一个网站.换句说, ...

最新文章

  1. linux系统启动流程详解
  2. 13.8 线程的安全问题和解决方法
  3. vb.net 机器学习-候选消除法
  4. 数据科学入门与实战:Seaborn002热力图等
  5. linux查看某个端口的流量_Linux下如何对端口流量进行统计
  6. win7保护视力的电脑设置
  7. 【转载】Android系统裁剪方法
  8. 南京工资个税计算机,最新南京工资扣税标准
  9. Modularity(模块性)
  10. 【C语言从青铜到王者】第零篇·与C语言来个约会
  11. 计算机插上u盘就无法点亮,u盘启动电脑无反应,小编教你电脑插上U盘后无法启动解决方法...
  12. 第九周项目6-3:三色球问题
  13. 中标麒麟操作系统安装MySQL5.7.22
  14. Uderstanding and using Pointers 读书笔记
  15. QA质量体系搭建、质量架构全景图、质量效率全景图
  16. python精彩编程200例 pdf-Python创意编程200例turtle篇
  17. Nexus Maven私服配置
  18. 一个靠谱的成都java培训机构应该具备哪些特点?
  19. 享学课堂java架构师课程,你还看不明白?
  20. python alipay 支付

热门文章

  1. 女性开车5大安全驾车好习惯 为您支招
  2. 钱与命的八句真实话(图)
  3. 用于MPEG-4视听流的RTP负载格式
  4. Coolite动态加载CheckboxGroup,无法在后台中获取
  5. 1566:基础练习 十六进制转八进制
  6. 无限轮播图片的实现原理
  7. CreateThread和_beginthread的区别
  8. Launcher结构之home screen
  9. C++中的结构体函数
  10. 剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?