Python 安装 python 学习 一 python 语法,及变量类型 python 学习 二 爬一个图片网站上 python 学习 二 02 爬一个图片网站,获得主链接网址,并保存 python 学习 二 03 爬一个图片网站 - 获得所有分页网址 python 学习 二 04 爬一个图片网站 - 解析文件,获得所有图片链接 python 学习 二 05 爬一个图片网站 - 下载图片链接 python 学习 二 06 爬一个图片网站 - 多线程方式下载 python 学习 三 01 再爬一个网站,几行代码,搞定分类类别 python 学习 三 02 再爬一个网站,获得所有分页 python 学习 三 03 再爬一个网站,根据分页,下载图片 Python 爬虫 上篇 Python 爬虫 下篇
Python 爬虫 上篇
Python 爬虫学习 第一篇 准备
近期使用 python 用来爬取网络图片,之前也有分章介绍,这次统一汇总介绍下我的爬虫过程.
爬虫是啥
网络爬虫是什么?
看意思是一个虫子,一个什么虫子?实际上指的是蜘蛛 spider.
蜘蛛结成网,在网上爬来爬去的寻找坠入网络中的食物.
网络爬虫就是差不多的意思,在互联网上爬来爬去的寻找你的精神食物.
开始爬前的准备
要开始爬,你得先知道爬哪里吧,你得先获得网页的源码即 html 信息吧,获得后,你需要分析出链接和图片等资源吧.
要获取 HTML 并分析网页信息,需要下载一个第三方的库 requesets,下载地址:
下载并解压
最重要的是 这个库有完善的中文资料 ,讨厌蝌蚪文的可以放心的参考
你如果和我一样使用 pycharm 来编辑,加入第三方库的步骤如下:
安装好 requests 第三方库后,开始测试
开始获取 HTML
怎么样,惊喜不惊喜,简单不简单,使用其它语言,无法用这么简单的语句就获得 html 的信息.
解析 HTML
使用 request 获取了网页源码,下一步就是如何解析了,你如果用过 C++ 等语言,你会发现很难找到顺心的网页解析库,但 python 在这方面却很擅长.
还是用一个第三方库 Beautiful Soup
这是个什么库呢?
直译为:漂亮的汤?
难道是将网页作为美味的汤,从这汤里慢慢品味其中滋味,抽丝剥茧的分析汤的构成成分,汤的味道? 老外的思路,真难猜,先不管这个了.
说白了,就是用来解析 HTML 或 XML,从中提取有用数据的库.
而且也有强大的中文支持
首先分析,解析哪些链接
这应该是按类别来分的,我们在源码中找到这一项
之所以有乱码,很可能是与我电脑没有日文字体有关也可能编码不正确,先不管它了,目前对解析无影响,可以看出,这些类别是放在 class=menu 的 div 下了,具体的就是这个 DIV 下的
1,好了,首先第一步,获得这个 DIV
这样我们就获得了这个 DIV 的内容,下面再继续解析这个 DIV
2,解析 DIV
解析这个 DIV,还要以这个 DIV 内容为参数,构造一个 BeautifulSoup(以下简称为 BS :) 注意绝不是鄙视的意思)对象, 因为全篇只有一个 menu 类型的 DIV,所以所有类型都保存在上面解析的 div_menu[0] 中了,将这个对象强制转换为字符串类型做 BS 的参数
看源码可以发现,链接都是站内链接
现在注意了,我要把所有的链接提取出来
输出所有的链接
对应 HTML 源码
可以看到,第一个 a 标签,是没有 href 属性的,所以,会输出 None, 其它 a 标签,正常输出
因为这些都是站内链接,
我们先定义一个变量,表示该站的域名
又因为,有的链接可能是 none,所以需要判断下是否存在 href 属性,下面是输出所有链接的代码
输出的链接如下:
这样,我们就正确的获得了这些类别对应的网址了.
下一步工作,下一节再说,现在还有些事,改天聊
第二篇
https://docs.python.org
书接上回,上文书说道,我们已经获得了所有类别的链接.
下面我将这些链接保存到一个临时文件中,其实不保存也可以,但开始学 python,借这个机会,也练练如何创建目录,保存文件.
将上文获得的主链接保存到文件中
定义一个函数,搞不懂,为什么 python 不用 C 语言那样的定义函数,也不用 C 语言的那样的循环和跳转,一时用惯了别的语言的人,很难一下子转过来.
这是写的将链表中的链接,保存到文件中去,
写到一个文件中,有点乱,因此,我又新建了一个 py 文件,用以编写常用的函数,取名为 common.py
下载获得的主链接
因为我把所有的常用函数,写到 common.py 中了,所以要导入这个文件
主程序中,要用到这个 common 中自定义的保存函数
经过测试,可以将列表内容,写入文件了.
现在,我又看了看,觉得很乱,我想单独的建立一个目录 tmp,用来保存临时文件
目录文件相关的,要引入 os
不管怎么说,使用下面代码,已经把所有的链接都保存在临时文件中.
第三篇
本节思路
理一理逻辑,先不去考虑细节,逻辑理清了,根据这个逻辑去实现细节就好了.我也是第一次使用 python,也没有时间看文档,因为想获得图片素材,直接就想爬一个网站.
我们之前,已经分析了首页,获得了图片类别对应的链接,并将这些链接保存在了本地文件中.
下面,
第一步,我们会下载主链接网页,保存在本地文件中.
第二步,分析主链接,获得相应的所有分页网址
第三步,将主链接及分页链接,统统下载下来
下载下来后,后续我们会解析网页,获得图片地址,下载图片,本节主要完成前三步即可.
下载主链接网页,保存在本地
上文,我们将首页中主链接保存了起来,
下面,为了免去每次下载网页的麻烦,我们一次性下载这些网页,并保存在本地中
主文件中,就一句话,因为细节都封装在另一个文件中了,我们主要考虑逻辑,细节可以通过查资料去实现,去调试.
这是 common.py 中写的下载函数
其中调用了单个网址下载函数 downHtml
通过上述代码,已经将链接下载到了本地.
获得分页链接
上文提到,解析了首页,将所有的主分类链接保存到了本地文件中.
我们再打开一个主链接看看
每个主链接,都有相应的分页链接
我们下面的目的,就是获得主链接对应的所有分页链接
分析网页源码
分页链接保存在 class=link2 的 div 下
其中,获得分页链接的代码如下:
将所有的链接对应的网页,下载到本地
这是下载后的本地文件
第四篇
本节目的:解析下载到本地的文件,获得图片链接
所有相关的网址,都下载到本地了,下面我们依次解析,获得图片链接,然后将图片链接保存起来.
由上图,可看到
是一组,保存着背景图片,那我们解析的时候,将这一组图片,单独的放在一个文件夹 background 中
是另一组,解析的时候,单独的放在一个文件夹中
第一步,我们遍历目录,获得所有的文件路径
为此,我写了个函数
#目录下的文件和文件夹 def GetAllSubFile(dir,list):
#目录下的文件 def GetAllSubFile(dir,list,ext):
#目录下的文件夹 def GetAllSubDirs(dir,list):
调用
txtFileList=[]common.GetAllSubFile(tmpDir+"htmls\",txtFileList,"txt")
获得目录下的 txt 文件路径,保存在 txtFileList 中.
第二步 解析文件,获得 IMG 路径
1, 首先,针对不同分组,创建相应的子目录
是一组,保存着背景图片,那我们解析的时候,将这一组图片,单独的放在一个文件夹 background 中
我们将右侧的数字去掉,剩下的字符串作为这一组的类别
分析源码
图像链接保存在 class=subcontents 的 div 下,
为此我写了个函数
调用
common.FindAllImg(txtFile,"div","subcontents","data-layzr")
获得文件中,所有图片的链接列表,,
这一过程的代码如下:
第五篇
下载图片链接
本节的主要任务是下载文件中获得的图片链接
为此我写了个函数
def downImg(httpPath,localPath):
实测中,考虑到有些链接不存在,有些链接超时,有些链接其它错误,所以一次下载不了,多次尝试.
而且使用 request.urlretrieve(httpPath,localPath) 直接下载时,出现出现 10060 错误,于是使用 request.urlopen(httpPath,timeout=60),然后以读的方式进行下载.
我这的目录结构是这样的
第一步,读取所有的子文件夹
第二步,读取子文件夹下的 img.txt
第三步,下载 img.txt 中的链接
为此,我又写了下面的函数
DownThumbnail 是下载缩略图,因为这个网站上,目前或的的这些链接对应的是缩略图.
运行后,就会发现,可以下载了
目前是单线程方式下载的缩略图
下一节介绍下多线程方式,下载高清图
第六篇
多线程方式下载
使用:
下载下的图片,
多线程下载速度是比单线程要快一些
对您有所启发的话,欢迎扫下红包奥
来源: http://www.jianshu.com/p/7cc0d588b6cf