探索黑客技术攻防,实战研究与安全创新

导航菜单

编写Python爬虫分析数据爬取

信息时代,数据就是宝藏。数据的背后隐含着无穷的宝藏,这些宝藏也许就是信息量所带来的商业价值,而大数据本身也将成为桌面上的筹码。

说了那么多数据的重要性,本篇文章所提到爬取的数据不包括超过传统数据库系统处理能力的数据。而是从一个简单的爬虫程序上讲起,讲如何编写属于自己的爬虫,获取想要的简单数据,并让程序对数据进行分析进而得到我们想要的信息。

逻辑分析

编写爬虫首先要有个简单的逻辑思路,无非是发送请求-加载页面-获取页面的信息-提取想要的数据-数据可视化、以表格的形式呈现或者根据需求批量下载到本地。

所以这里我们不妨写两个工程程序进行测试,一是批量数据下载到本地,我们可以把本地搭建服务器里用户的相册批量下载下来,寻找规律随机下载,或利用一些接口从服务器上爬取。二是对特定数据爬取,最好以可视化表格的形式表现出来,我们可以采集网站上一些数据,然后以表格显示。

案例一代码分析

现在我们开始写代码,用Python来实现这一功能,首先是发送请求信息。Python的Urllib模块提供了读取web页面数据的接口,我们可以读取万维网、FTP上的数据。用urllib.urlopen()方法用于打开一个URL地址。用read()方法可以读取URL上的数据。其间对字符串的处理自定义了函数,为获取想要的数据,编写了正则表达式。简单基础的Python编程,附上核心代码。

//自定义函数获取指定两个字符串之间的数据


defsfinds(start_str,end,html):
start=html.find(start_str)
ifstart=0:
start+=len(start_str)
end=html.find(end,start)
ifend=0:
returnhtml[start:end].strip()
//自定义函数getHtml()用来读取网页数据
defgetHtml(url):
p=urllib.urlopen(url)
html=p.read()
returnhtml
//自定义函数构造正则表达式来获取网络图片
defgetImg(html):
reg=rurl[^]*[^u]*[^r]*[^l]*[^]*/url
imgae=re.compile(reg)
imglist=re.findall(imgae,str(html))
returnimglist


有了以上定义的基本函数,就可以进行很多实战测试了。利用已有的一些接口来访问服务器空间上保存的数据,下面就是一个网络爬虫爬取数据,相册批量下载的测试效果图。


然后我们的爬虫系统会自动下载保存图片,我们只需要耐心等待。

出去转了一圈,回头再来看的时候所有相册已经下载完毕,到程序文件夹里可以看到下载的照片。


A39.png

接着又测试了一个,效果如图。

A41.png

案例二逻辑分析

作为学习来讲,在案例二中我们涉及html数据解析。欧尼酱这个网站我之前没有听过,一次偶然发现里面有首还不错的日系音乐,于是决定拿这个网站为例子,爬取o站里部分音乐信息。首先打开一个页面,查看其源代码,如图7所示。

A42.png

图7

从这个源代码中我们可以看到divcalss=”contentmarkitup-box”这个html标签中保存的是歌曲的名字,我们可以获取所有这个标签中包含的内容,以此来爬取页面所推荐的情人节日漫歌曲名字。

我们可以先获取页面的html数据信息,然后通过class或者ID查找特定的标签,接着对标签的内容进行获取,列表显示,核心代码如下:

//首先还是读取页面信息


defgetHtml(url):
p=urllib.urlopen(url)
html=p.read()
returnhtml


接着对读取的信息进行处理,我们知道我们爬到的信息是有大幅度的html标签,我们要对数据进行html解析。对此我们有很多方法,HTMLParser模块、BeautifulSoup、SGMLParser,这里我们用SGMLParser,理由不多讲了,好用。核心代码如下:


//定义类
classGetIdList(SGMLParser):
defstart_div(self,attrs):
ifself.flag==True:
self.verbatim+=1
return
fork,vinattrs:
ifk==classandv==contentmarkitup-box:
self.flag=True
return
defend_div(self):
ifself.verbatim==0:
self.flag=False
ifself.flag==True:
self.verbatim-=1


A43.png

图8

通过编写者两个小爬虫,我逐渐体会到了爬虫的一些作用,对其的一些巧妙应用,多线程的处理有时候会大大提高做事的效率,而一个功能强大的爬虫系统所能做的远不止这些。

本文内容所提及均为本地测试或经过目标授权同意,旨在提供教育和研究信息,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,作者不鼓励或支持任何形式的非法行为。