林天宇用Python3学习编写网络爬虫之一.docx

上传人:b****4 文档编号:11700621 上传时间:2023-03-30 格式:DOCX 页数:15 大小:4.21MB
下载 相关 举报
林天宇用Python3学习编写网络爬虫之一.docx_第1页
第1页 / 共15页
林天宇用Python3学习编写网络爬虫之一.docx_第2页
第2页 / 共15页
林天宇用Python3学习编写网络爬虫之一.docx_第3页
第3页 / 共15页
林天宇用Python3学习编写网络爬虫之一.docx_第4页
第4页 / 共15页
林天宇用Python3学习编写网络爬虫之一.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

林天宇用Python3学习编写网络爬虫之一.docx

《林天宇用Python3学习编写网络爬虫之一.docx》由会员分享,可在线阅读,更多相关《林天宇用Python3学习编写网络爬虫之一.docx(15页珍藏版)》请在冰豆网上搜索。

林天宇用Python3学习编写网络爬虫之一.docx

林天宇用Python3学习编写网络爬虫之一

林天宇用Python3学习编写网络爬虫

(之一:

入门实践)

作者:

***

一、写在前面

1、本文适应的读者范围

●会一点点Python的基本语法;

●已经安装好了Python3和PyCharm;

●网络爬虫新手

2、本文所使用的开发环境

●Macpro/iOS

●Python3

●PyCharm

3、本文不纠结以下内容

●为什么选择Python3而不是Python2?

答:

没什么特别原因,个人喜好。

●如何安装Pyhon3?

请查阅其他文档。

●PyCharm是什么?

为什么不用其他工具。

一个常用的Python开发工具,个人喜欢,可参阅其他文档。

如果你不喜欢,你也可以用其他工具编码和调试。

二、快速开始

东北人有句话说:

能动手,尽量不瞎叨叨。

少些废话,快速开干。

1、新建项目和文件

启动PyCharm,“CreateNewProject”。

因为估计不需要到特别的框架,所以类型就默认地选择了“PurePython”,名字就起成了“WebSpider”(我瞎命名的,就是觉得Spider比较帅气而已),然后“Create”如下图:

新建一个Python文件,命名为Spider001,毕竟也是我的第一只小爬虫嘛。

OK,到目前为止,已经新建一个名字叫做Spider001的Python空白文件了。

可以在项目等资源管理器中看到WebSpider项目下面,有一个Sider001.py的文件。

我们接下来就对这个Sider001.py文件进行编辑和测试。

2、第一爬

先写代码,感受一下效果,找找成就感,然后再详细分析和思考。

代码如下:

importurllib.request

url=""

data=urllib.request.urlopen(url).read()

data=data.decode('UTF-8')

print(data)

然后,Run,选择Spider001.py,运行结果如下:

由上图可以见,运行正常,而且已经将XX的HTML代码获取到了(见运行窗口的第二行HTML代码)。

XX心想,我也不知道倒了什么霉,你们爬虫测试的HelloWorld都喜欢拿我测试,无谓增加我压力。

那我们再回头来详细看看刚才的代码:

#首先引入urllib库的request子库

importurllib.request

#接着定义一个我们要爬取的变量叫url

#然后将我们要爬去的网址字符串值赋给url

#可怜的XX。

url=""

#定义一个data变量,用来获取爬过来的字符串

#下面是urllib的吧啦吧啦的用法,没什么好解释的。

#它就是这么用的,记住就好了。

#其中url是变量。

data=urllib.request.urlopen(url).read()

#编码,改变编码。

decode方法。

data=data.decode('UTF-8')

#print打印出来结果。

print(data)

#程序结束

我们可以得出以下几点初学者的心得:

●用到一个urllib的库。

Urllib库及其子库的用法,官方文档如下:

https:

//docs.python.org/3/library/urllib.html

●其获取url其内容的方法为:

urllib.request.urlopen(url地址).read()

●将字符串本身使用decode(‘编码类型’)的方法后,可以重新编码

3、美女图片!

美女图片!

都说美女是推动社会发展的重要因素,对美女的追求,也是推动我们宅男技术水平的重要因素。

当年在学校机房里用486电脑DOS环境下,冒着被机房老师抓住的生命危险偷偷看舒淇的图片,确实对我当年的技术水平提升很大。

第一爬的过程中,只爬了一串HTML源代码,似乎新鲜劲很快就过去了,真正我们要爬的,是美女图美女图啊!

网站美女图片站众多,我本想选择我最喜欢的BeautyLeg作为测试的网站,但是很遗憾,可能这个网站的服务器在其他地区,网络速度很慢,图片质量又高,所以每次运行时间都会比较长,不太适合我们前期作为边调试边学习用。

所以暂时放弃,不过,美腿们,不要着急,我调试好后,再来爬去你们。

不要着急,等我。

在此情况下,我随便XX了一个“美女图库”网站。

真是XX的,一点广告费都没给的,美女图库。

这个网站也是典型的“三级”结构的网站。

所谓“三级”结构(别想歪了),指的是:

我们先从最简单的开始,先将目标定在基础,也就是最详细这一级的内容开始爬取。

我们先点击网站链接,到达第三级的详细图(文)这一层网页。

我们避开了需要登录和收费的会员专区的栏目,选择了“免费下载栏目”进入,具体的网址如下:

首页:

栏目页:

内容页:

这个网站的内容页是一个图文格式的网页,这一页有一张美女图片,我们从简单的开始,那我们就先将这一页的这张图片爬下来到本地硬盘吧。

我们用鼠标在图片上点右键,获取这张图片的准确名称和地址为:

从上述地址分析,貌似这个网站的命名还是比较清晰易懂的,能找到规律。

也就是说很可能2016是这个明星这个专辑的编号,然后每张图片从1开始依次编号命名。

明星专辑的编号是2016,也很可能明星专辑的编号,也是从1开始依次编号的。

(究竟是不是这样,会不会被打脸,后面测试了才知道。

老习惯,先上代码,看效果,找成就感。

新建一个新的py文件,命名为GetMM131.py

importurllib.request

#估计后续得重用,所以将其写成一个函数

defget_img(url,img_name):

print('开始读取图片地址:

'+url)

img_info=urllib.request.urlopen(url).read()

#文件IO操作的办法,语法简单实用,一看就明白,暂时不详细说

withopen(img_name,'wb')asfp:

fp.write(img_info)

print('已下载完毕,保存为文件:

'+img_name)

return

 

#用the_url和the_img_name分别存储这次测试的下载的文件地址以及要保存称为的文件名

the_url="

the_img_name="1.jpg"

#调用下载图片的函数

get_img(the_url,the_img_name)

运行效果如下:

打开程序文件所在的目录,果真1.jpg美女图已经静静地在文件夹下存在了。

4、美女图片0.2版!

好的,有点感觉了,但是还是不过瘾,看能否一次性把这个2016编号的美女图片集给全部爬下来。

我们点开了下面的分页菜单:

一页一页看下去,发现其图片的地址果然为:

……

那这就好办了,有规律,用循环来解决。

于是我们调整一下程序代码,get_img函数暂时不用变,调整一下调用该函数的方式。

于是有了以下的代码:

i=1

whilei<=12:

#因为i的数据类型是int,不能直接变成字符串,所以采用str函数转换了一下

page_num=str(i)

the_url="

the_img_name=page_num+".jpg"

#调用下载图片的函数

get_img(the_url,the_img_name)

i=i+1

编写完毕,运行!

运行效果如下:

貌似一切顺利,怀着激动的心情进入文件夹,果然,12张美女图片都在文件夹里待着了。

5、美女图片0.3版

似乎总还是感觉缺少点什么,如果我们再把程序做得智能一点点,看是否可以,于是有以下几个想法的改进:

●输入为一个个人专辑的编号;

●系统自动读取该编号下图片的总数;

●系统建立一个为编号等目录,然后把该专辑的图片全部保存到该目录下。

于是我们要学习几个技能:

1)、正则表达式:

目的是要从HTML字符串里,找到“共XX页”字样,读取XX这个信息。

2)、文件夹操作:

目的是如何建立一个文件夹目录,然后将这个图片好存在这个目录里。

于是就有了以下的代码:

importurllib.request

importre

importos

 

#函数get_img

#功能:

获取一个网上的图片,然后保存到本地

#参数:

url(图片的网址),img_name(图片的名称)

defget_img(url,img_name):

print('开始读取图片地址:

'+url)

img_info=urllib.request.urlopen(url).read()

#文件IO操作的办法,语法简单实用,一看就明白,暂时不详细说

withopen(img_name,'wb')asfp:

fp.write(img_info)

print('已下载完毕,保存为文件:

'+img_name)

return

 

#需要爬取的专辑的参数编号

this_f_num=305

#获取该专辑第一页的页面信息,然后采取正则的方式,获取其中"共多少页"

f_html=urllib.request.urlopen('%this_f_num).read().decode('gbk')

regex=r'共(.*?

)页'

pa=pile(regex)

#由于获取的是一个数组格式,但只有一个数字,于是将其读取出来。

iMax=int(re.findall(pa,f_html)[0])

#建立一个目录

this_f_now=os.getcwd()

f_path=this_f_now+"/"+str(this_f_num)+"/"

ifos.path.isdir(f_path)==False:

os.mkdir(str(this_f_num))

#进入循环下载

i=1

whilei<=iMax:

#因为i的数据类型是int,不能直接变成字符串,所以采用str函数转换了一下

page_num=str(i)

the_url="str(this_f_num)+"/"+page_num+".jpg"

the_img_name=f_path+page_num+".jpg"

#调用下载图片的函数

get_img(the_url,the_img_name)

i=i+1

输入对应的专辑的编号,如“1500,1771,1881”等,依次运行,效果如下:

貌似不错,然后我们到对应的目录下取看看,美女图已经安安静静地分门别类地存好了。

 

三、草草收尾

原来以为写个类似读书笔记或实验报告形式的文档会比较简单,但是没有想到页是比较辛苦的。

一边做一边截图,小小的一个功能,居然也写了18页。

代码依然还很臃肿,功能也还很一般。

还有一些需要注意的,如有些网站必须是浏览器才能访问,否则报错;有的网站还需要登录之后才能查看相关信息,等等。

考虑到第一次写东西,也还是以成就感为先吧。

所以这次到内容先写到这里,也算是草草收尾。

计划在以后,还根据自己的学习情况,写一些“林天宇学习XXXX”之类的题目,大家可以在XX文库里搜索“林天宇”或“易动资讯”,没准就找到我了。

本文过程中借鉴了少量网上资料,但全文是自己编写,纯属原创,如对您有所参考,我深感荣幸。

请随意使用,我不在乎版权,也不必告知我。

呵呵。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机软件及应用

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1