【Python实战】用代码来访问1024网站

1024是一个好网站html

首先,这次实战系列的前提是您能科学的找到1024网站!我这里并不提供网站地址,特此声明,这里只是用计算机科学的态度和方法,来分析一个问题。和1024网站没有任何关联。python

在1024网站上,不知道你是否和我同样,平时爱逛技术讨论区,爱看一些每日资讯总结的帖子,那么会不会由于板块的主题帖子是按照回复时间排序而找不到本身喜欢看的帖子而心烦意乱呢?是否是为了找本身今天没看过的帖子,而一遍又一遍的从新从头开始翻呢?git

别怕,我都被这些问题困扰过!社区人口众多,帖子刷的很快,为了看到天天发布的帖子,板块的排版不得不让我每次进来都得从头开始找,看看哪一个帖子今儿没看过。并且是左边看标题,右边看发布时间,好累啊。这样我不喜欢,有些浪费时间。程序员

做为一个程序员,我以为,这些问题,都是能够本身手动写一个Python爬虫来解决。github

我感受这个虫子全网***最方便***,最牛逼最便捷,***最能解决实际问题***的虫子!活学活用,真正的让代码方便个人生活,这才是我编写程序索要达到的目的

##咱们如今遇到的问题: 论坛的帖子排序是按照回帖时间排序的,为了可以看到天天最新发布的帖子,老是得从头开始看整个论坛,很烦,浪费时间。web

技术讨论区帖子按照回帖时间排序

咱们但愿变成的样子

论坛的帖子按照时间发布顺序排列,这样看天天的新内容就很省事儿。正则表达式

若是咱们要写一个爬虫来解决的话,大体结构应该以下:json

Daily1024结构

这里有几个部分:浏览器

  • config.json: 这个算是配置文件,目前须要填入的信息有: 1.1024网站的的URL 2.爬虫结果输出的的文件位置 3.爬虫须要爬的最大page num 4.板块信息,指论坛的板块名称(这个能够自定义)和板块的fid
  • Url_manager: 管理备爬取的URL。
  • Html_downloader: 爬虫获取网页信息。
  • Html_parser: 爬虫的网页解析器。
  • Html_output: 爬虫输出结果。

上面的结构很简单,那么简单的流程就是:咱们先配置好本地的config.json文件,而后启动程序,爬虫会自动根据配置好的信息,而后抓取各个板块前几页的内容,根据帖子发帖时间,筛选爬出出来信息,随后,将获取到的信息按照时间排序,最后输出成html格式的文件,使用本地的网页浏览器打开。浏览器里面能够看到帖子的id,帖子的标题以及帖子的发布时间。经过点击帖子的标题,能够跳转到社区的帖子。服务器

这样,内容丰富的小草网站,就直接变成了咱们本地写的最简单的***html***文件。

咱们整理后的网站首页:

Daily1024的index

新整理后板块长这个样子:

Daily1024的技术讨论板块

Daily1024的技术讨论板块,按照时间顺序排列

这样看上去,就简单和舒服的多了,再也不须要像以前那样一个一个的找了。并且,咱们看过哪一个帖子,都是有不一样颜色区分的。这样节省好多好多时间。下面就简单的说一下工程中运用到的技术点吧。

技术梳理

虽然如今网络上有不少成熟的爬虫框架,好比Scrapy,我以前也用过ScrapyScrapy确实强大,可是感受这样体会不到爬虫的乐趣。因此干脆本身从零搭建一个爬虫。从零距离感觉爬虫,感觉Python的乐趣。

总体技术

  • python 3.6
  • requests
  • BeautifulSoup4
  • webbrowser
  • json

Config.json

这个是配置文件,将须要一些基本参数写在这个json文件中。先关的读取类是config_utils中的configreader

config.json

Url_manager

经过一个dict来存储板块名称和对应的板块URL,提供一些简答的方法来操做URL

Html_download

经过使用requests模块来进行网页的访问。从而拿到网页数据,为后面步骤的解析提供基础。
这里进行网络请求的时候,因为1024网站作了反爬处理,我添加了不一样的HTTP header。目前还算比较好用。表头信息在user_agents文件中。

Html_parser

经过BeautifulSoup来对html作解析处理。每个帖子都是有一个惟一id的。帖子都封装到CaoliuItem中,而后将结果输出到html_outputer中。这里是经过htmltag来作的寻找,并非经过正则表达式。可能有点

Html_outputer

这个是将以前收集到的爬虫解析结果,整理成html文件的类。最终结果有一个index页面,每一个版块还有本身的页面。他们之间相互连接在一块儿,点击起来爽爽的,炒鸡方便。

须要改进的地方 TODO

  • 总体结构虽然清晰,可是总体结构还须要优化。要作到像Scrapy那样强大的虫子,得一步一步来。
  • 目前爬虫能力比较弱,没有用到多线程爬虫。下一个版本能够加入多线程,这样既能提高速度,又能提高质量。
  • parser的解析仍是太依赖网站的布局。如果网站布局发生改变,parser就得修改。这个问题是全部爬虫的通病,我还在想办法把这里作的更活一些,不要这么死板。
  • outputhtml文件美观度不够。
  • 下一版本,想将解析出来的东西,可以和MongoDB联动,算是本地保存一份吧。由于这样就可以看到以前的帖子信息。
  • 接下来应该最好是针对每一个帖子,再爬一层,能够作到自动将图片或者种子文件下载下来。这个下载图片和种子的虫子我以前用Scrapy的时候作过,可是仍是须要结合本身写的虫子比较好。
  • 最好可以将爬虫扩展到其余网站,好比微博啊,V2ex啊,之类的资讯网站。感受天天来回逛这几个网站,打开这个打开那个,确实有时候挺浪费时间的,倒不如把它们天天更新的东西都整合成在一块儿,经过一个网站,一次看个够。这样多爽。
  • 最终的版本就是把这个程序作成一个后台服务,而后部署到服务器上,天天经过访问,可以看到当天各个网站的更新内容。作到 "访问一个,就能够访问所有" 的效果。

这个项目源码,欢迎STAR。

最后来一波福利,关注公众号:皮克啪的铲屎官,回复1024,可以找到你须要的东西哦~ ![关注并回复 1024 有惊喜](底部二维码.png

)
相关文章
相关标签/搜索