Python 爬虫 上篇

  • A+
所属分类:python网络爬虫

Python爬虫学习 第一篇 准备

近期使用python用来爬取网络图片,之前也有分章介绍,这次统一汇总介绍下我的爬虫过程。

爬虫是啥

网络爬虫是什么?

看意思是一个虫子,一个什么虫子?实际上指的是蜘蛛spider。

蜘蛛结成网,在网上爬来爬去的寻找坠入网络中的食物。

网络爬虫就是差不多的意思,在互联网上爬来爬去的寻找你的精神食物。

开始爬前的准备

要开始爬,你得先知道爬哪里吧,你得先获得网页的源码即HTML信息吧,获得后,你需要分析出链接和图片等资源吧。

要获取HTML并分析网页信息,需要下载一个第三方的库requesets,下载地址:

下载并解压

Python 爬虫 上篇

最重要的是 这个库有完善的中文资料 ,讨厌蝌蚪文的可以放心的参考

你如果和我一样使用pycharm来编辑,加入第三方库的步骤如下:

Python 爬虫 上篇

Python 爬虫 上篇

Python 爬虫 上篇

安装好requests第三方库后,开始测试

开始获取HTML

Python 爬虫 上篇

Python 爬虫 上篇

怎么样,惊喜不惊喜,简单不简单,使用其它语言,无法用这么简单的语句就获得html的信息。

解析HTML

使用request获取了网页源码,下一步就是如何解析了,你如果用过C++等语言,你会发现很难找到顺心的网页解析库,但python在这方面却很擅长。

还是用一个第三方库 Beautiful Soup

这是个什么库呢?

直译为:漂亮的汤?

难道是将网页作为美味的汤,从这汤里慢慢品味其中滋味,抽丝剥茧的分析汤的构成成分、汤的味道? 老外的思路,真难猜,先不管这个了。

说白了,就是用来解析HTML或XML,从中提取有用数据的库。

而且也有强大的中文支持

Python 爬虫 上篇

Python 爬虫 上篇

首先分析,解析哪些链接

Python 爬虫 上篇

这应该是按类别来分的,我们在源码中找到这一项

Python 爬虫 上篇

之所以有乱码,很可能是与我电脑没有日文字体有关也可能编码不正确,先不管它了,目前对解析无影响,可以看出,这些类别是放在class=menu的div下了,具体的就是这个DIV下的<a链接标签

1、好了,首先第一步,获得这个DIV

Python 爬虫 上篇

这样我们就获得了这个DIV的内容,下面再继续解析这个DIV

2、解析DIV

解析这个DIV,还要以这个DIV内容为参数,构造一个BeautifulSoup(以下简称为BS :) 注意绝不是鄙视的意思)对象,因为全篇只有一个menu 类型的DIV,所以所有类型都保存在上面解析的div_menu[0]中了,将这个对象强制转换为字符串类型做BS的参数

Python 爬虫 上篇

看源码可以发现,链接都是站内链接

Python 爬虫 上篇

现在注意了,我要把所有的链接提取出来

Python 爬虫 上篇

输出所有的链接

Python 爬虫 上篇

Python 爬虫 上篇

对应HTML源码

Python 爬虫 上篇

可以看到,第一个 a标签,是没有href属性的,所以,会输出None,其它a标签,正常输出

因为这些都是站内链接,

我们先定义一个变量,表示该站的域名

Python 爬虫 上篇

又因为,有的链接可能是none,所以需要判断下是否存在href属性,下面是输出所有链接的代码

Python 爬虫 上篇

输出的链接如下:

Python 爬虫 上篇

这样,我们就正确的获得了这些类别对应的网址了。

下一步工作,下一节再说,现在还有些事,改天聊

第二篇

https://docs.python.org

书接上回,上文书说道,我们已经获得了所有类别的链接。

下面我将这些链接保存到一个临时文件中,其实不保存也可以,但开始学python,借这个机会,也练练如何创建目录,保存文件。

将上文获得的主链接保存到文件中

定义一个函数,搞不懂,为什么python不用C语言那样的定义函数,也不用C语言的那样的循环和跳转,一时用惯了别的语言的人,很难一下子转过来。

这是写的将链表中的链接,保存到文件中去,

Python 爬虫 上篇

写到一个文件中,有点乱,因此,我又新建了一个py文件,用以编写常用的函数,取名为common.py

下载获得的主链接

因为我把所有的常用函数,写到common.py中了,所以要导入这个文件

Python 爬虫 上篇

主程序中,要用到这个common中自定义的保存函数

Python 爬虫 上篇

Python 爬虫 上篇

经过测试,可以将列表内容,写入文件了。

现在,我又看了看,觉得很乱,我想单独的建立一个目录tmp,用来保存临时文件

目录文件相关的,要引入os

Python 爬虫 上篇

Python 爬虫 上篇

不管怎么说,使用下面代码,已经把所有的链接都保存在临时文件中。

Python 爬虫 上篇

Python 爬虫 上篇

第三篇

本节思路

理一理逻辑,先不去考虑细节,逻辑理清了,根据这个逻辑去实现细节就好了。我也是第一次使用python,也没有时间看文档,因为想获得图片素材,直接就想爬一个网站。

我们之前,已经分析了首页,获得了图片类别对应的链接,并将这些链接保存在了本地文件中。

下面,

第一步,我们会下载主链接网页,保存在本地文件中。

第二步,分析主链接,获得相应的所有分页网址

第三步,将主链接及分页链接,统统下载下来

下载下来后,后续我们会解析网页,获得图片地址,下载图片,本节主要完成前三步即可。

下载主链接网页,保存在本地

上文,我们将首页中主链接保存了起来,

Python 爬虫 上篇

下面,为了免去每次下载网页的麻烦,我们一次性下载这些网页,并保存在本地中

主文件中,就一句话,因为细节都封装在另一个文件中了,我们主要考虑逻辑,细节可以通过查资料去实现,去调试。

Python 爬虫 上篇

这是common.py中写的下载函数Python 爬虫 上篇

其中调用了单个网址下载函数downHtml

Python 爬虫 上篇

通过上述代码,已经将链接下载到了本地。

获得分页链接

上文提到,解析了首页,将所有的主分类链接保存到了本地文件中。

我们再打开一个主链接看看

Python 爬虫 上篇

每个主链接,都有相应的分页链接

我们下面的目的,就是获得主链接对应的所有分页链接

分析网页源码

Python 爬虫 上篇

分页链接保存在class=link2的 div下

Python 爬虫 上篇

其中,获得分页链接的代码如下:

Python 爬虫 上篇

将所有的链接对应的网页,下载到本地

Python 爬虫 上篇

Python 爬虫 上篇

这是下载后的本地文件

Python 爬虫 上篇

第四篇

本节目的:解析下载到本地的文件,获得图片链接

Python 爬虫 上篇

所有相关的网址,都下载到本地了,下面我们依次解析,获得图片链接,然后将图片链接保存起来。

由上图,可看到

Python 爬虫 上篇

是一组,保存着背景图片,那我们解析的时候,将这一组图片,单独的放在一个文件夹background中

Python 爬虫 上篇

是另一组,解析的时候,单独的放在一个文件夹中

第一步,我们遍历目录,获得所有的文件路径

为此,我写了个函数

#目录下的文件和文件夹def GetAllSubFile(dir,list):

#目录下的文件def GetAllSubFile(dir,list,ext):

#目录下的文件夹def GetAllSubDirs(dir,list):

Python 爬虫 上篇

调用

txtFileList=[]common.GetAllSubFile(tmpDir+"htmls",txtFileList,"txt")

获得目录下的txt文件路径,保存在txtFileList中。

第二步 解析文件,获得IMG路径

1、 首先,针对不同分组,创建相应的子目录

Python 爬虫 上篇

是一组,保存着背景图片,那我们解析的时候,将这一组图片,单独的放在一个文件夹background中

我们将右侧的数字去掉,剩下的字符串作为这一组的类别

Python 爬虫 上篇

Python 爬虫 上篇

分析源码

Python 爬虫 上篇

图像链接保存在class=subcontents的div下,

<img 属性为 data-layer 下

为此我写了个函数

Python 爬虫 上篇

Python 爬虫 上篇

调用

common.FindAllImg(txtFile,"div","subcontents","data-layzr")

获得文件中,所有图片的链接列表,、

Python 爬虫 上篇

Python 爬虫 上篇

这一过程的代码如下:

Python 爬虫 上篇

第五篇

下载图片链接

本节的主要任务是下载文件中获得的图片链接

Python 爬虫 上篇

为此我写了个函数

def downImg(httpPath,localPath):

实测中,考虑到有些链接不存在,有些链接超时,有些链接其它错误,所以一次下载不了,多次尝试。

而且使用request.urlretrieve(httpPath,localPath) 直接下载时,出现出现10060错误,于是使用request.urlopen(httpPath,timeout=60),然后以读的方式进行下载。

Python 爬虫 上篇

我这的目录结构是这样的

Python 爬虫 上篇

Python 爬虫 上篇

第一步,读取所有的子文件夹

第二步,读取子文件夹下的img.txt

第三步,下载img.txt中的链接

为此,我又写了下面的函数

Python 爬虫 上篇

Python 爬虫 上篇

DownThumbnail 是下载缩略图,因为这个网站上,目前或的的这些链接对应的是缩略图。

运行后,就会发现,可以下载了

Python 爬虫 上篇

目前是单线程方式下载的缩略图

下一节介绍下多线程方式,下载高清图

第六篇

多线程方式下载

Python 爬虫 上篇

Python 爬虫 上篇

使用:

Python 爬虫 上篇

下载下的图片,

多线程下载速度是比单线程要快一些

Python 爬虫 上篇

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: