Python 爬虫 上篇

96
gudianxiaoshuo
2018.01.14 14:04 字数 2852

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 是下载缩略图,因为这个网站上,目前或的的这些链接对应的是缩略图。

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

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

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

第六篇

多线程方式下载

使用:

下载下的图片,

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


对您有所启发的话,欢迎扫下红包奥


Python自我学习之路
Web note ad 1