专栏首页企鹅号快讯Python实现一个带图形界面的爬虫

Python实现一个带图形界面的爬虫

Python 是一个很简介高效的语言,许多的 Python 爱好者(包括我在内)都很喜欢用 Python 做爬虫,为什么会喜欢写爬虫,我对爬虫的感觉就是:它能给我带来无限的数据,看着数据一点一点地从网络上保存下来,内心肯定是激动的,感觉每条数据都是一笔钱。当然绝大部分人都不会只爬数据而不做其他的一些处理,因为这么多的数据摆在你面前,它却对你没有用处,所以爬虫获取到的数据有的会被进行处理之后做成网站,更多的是对数据进行分析,由于数据分析在企业中的作用很大,所以数据分析师一直都是一个热门的职业。在我之前发的文章中,大部分也是爬虫,但是这几个爬虫都存在很大的问题,就是爬虫的目标不方便修改,我们通常需要对特定主体的数据进行爬取,而爬虫又不只是一次性的程序,所以需要经常修改爬虫的目标,而我之前做的爬虫都没有直观的方式修改目标,每次修改都需要对程序进行改写,这样做很容易使得程序运行出错,于是今天的爬虫将会具有图形化用户界面,可以直观地指定爬虫目标。

Python 拥有长久的发展历史,GUI 编程也毫不逊色,Python 中有几个常见的图形库。简单介绍一下:

Tkinter:Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能键全的 GUI 用户界面。

Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。

以上简介摘自菜鸟编程

介绍完 Python 的 GUI 图形库,接下来来介绍一下本文要写的爬虫:

本文的爬虫目标网站是百度百科,百度百科上面对于大多数关键词都用统一的格式拼接 URL,并且最重要的一点就是百科词条的主要内容可以直接通过 HTML 获取,没有经过一些 js 渲染,大幅减少了编写爬虫的难度和复杂度。本爬虫使用的图形库是 Tkinter,这个图形库使用起来简单,缺点就是控件太少,难以做出太复杂又多功能的图形界面,不过这没关系,本爬虫只用到了极少的接口。爬虫 95% 的代码都是实现爬虫逻辑和框架的,所以 Tkinter 的缺点并不影响。

看一下爬虫简陋的 GUI 界面吧:

主要的作用是需要爬取的百科词条可以在文本框内填写,并可以一次填写多项。

由于版面有限,本文只讲解有特点的地方,完整的源代码可以在 Github 上查看并下载运行:https://github.com/JIMhackKING/BaikeSpider,运行时只要在文件夹所在命令行输入:

爬虫可以一次爬取多个关键词,只需要用逗号或分号隔开就行,并且符号不分中英文,这就方便了中英文输入时可以不需要切换中英文符号。实现的代码:

用正则表达式就可以实现了,无论是一种符号输入还是多种符号混合输入都可以正确处理并分割字符串,获取到所有的关键词。这里要对正则表达式语法里面的中文符号进行解码,因为从 Tkinter 的文本输入框控件中获取到的字符串是 Unicode 编码的,如果不处理会导致分割了错的字符串。

在爬虫主调度类SpiderMain中,实现了两个方法:

这两个方法都是爬虫的主调度方法,两个方法的主逻辑相同,只不过一个是单线程运行爬虫,另一个是多线程运行爬虫,多线程的爬虫方法中,内嵌了三个函数:

这三个函数的作用在文档字符串中也已经说明了,爬虫一共用到了两个队列,一个用于存储将要被爬取的 URL,另一个用于存储待解析的 HTML 文档,之后分别创建三个线程运行这三个函数,这样可以使得获取并下载 HTML 和解析 HTML 可以同时进行,减少了大量的 IO 等待时间,并且下载函数使用了五个线程,也就是有五个线程同时下载 HTML ,这可以快速地解决掉大量的待爬取 URL。

由于篇幅有限,本篇爬虫的介绍就到此为止了,其实本文对爬虫的介绍在代码中都已经详细地进行注释说明了,以文字来介绍并讲解一个项目是有难度的,所以最好的阅读方式就是边阅读代码边练习,并通过注释了解每一段代码的作用。

本文来自企鹅号 - 时空密语媒体

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 回家的低价票难抢?注意!可能是被“爬虫”吃了

    不到两个月,2018年春节要来了。 “今年我得早下手,抢张回家的低价机票。”在北京打工的小王对科技日报记者说,由于老家在云南,春节机票太贵,他都选择坐两天两夜的...

    企鹅号小编
  • 你的票被“虫子”吃了

    不到两个月,2018年春节要来了。 “今年我得早下手,抢张回家的低价机票。”在北京打工的小王对科技日报记者说,由于老家在云南,春节机票太贵,他都选择坐两天两夜的...

    企鹅号小编
  • 6大爬虫利器,轻松搞定爬虫

    工欲善其事必先利其器,Python之所以流行在于它有非常丰富的第三方包,无论是Web框架还是机器学习框架、抑或是爬虫框架,多得让人眼花缭乱,这给了开发者极大的选...

    企鹅号小编
  • 常见的反爬虫技术有哪些?如何防止别人爬自己的网站?

    爬虫与反爬虫是互联网开发工程师之间的斗智斗勇。作为网站开发者既要掌握爬虫的技术,还要更进一步去了解如何实现反爬虫。

    用户2781897
  • 如何向妈妈解释什么是爬虫

    前段时间我妈突然问我:儿子,爬虫是什么?我当时既惊讶又尴尬,惊讶的是为什么我妈会对爬虫好奇?尴尬的是我该怎么给她解释呢?

    CDA数据分析师
  • NB,用这一篇文章带你了解什么是爬虫?

    小詹说:对于学 Python 的小伙伴来说,爬虫是大多数人的入门菜,很是因吹斯汀。那么到底什么是爬虫呢,这篇文章用一个简单的语言来一节入门课。以下为原文。

    小小詹同学
  • python爬虫学习:爬虫与反爬虫

    Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及相关电子版书籍,欢迎前来领取...

    python学习教程
  • 一文让小白也能了解爬虫

    前段时间我妈突然问我:儿子,爬虫是什么?我当时既惊讶又尴尬,惊讶的是为什么我妈会对爬虫好奇?尴尬的是我该怎么给她解释呢?

    叫我龙总
  • 网络爬虫法律条文或出台:你的程序合法吗?

    2018年10月20日,一篇《独家|估值175亿的旅游独角兽,是一座僵尸和水军构成的鬼城?》的文章一出世便走红网络。文中称百亿体量的马蜂窝,其中2100万条“真...

    华章科技
  • python爬虫,学习路径拆解及资源推荐

    数据是决策的原材料,高质量的数据价值不菲,如何挖掘原材料成为互联网时代的先驱,掌握信息的源头,就能比别人更快一步。

    昱良

扫码关注云+社区

领取腾讯云代金券