鱼C论坛

 找回密码
 立即注册
查看: 6912|回复: 55

[作品展示] 【多进程爬虫】为科学而生的爬虫——爬向果壳的过客。。爱科学的应该比爱岛片的人多吧

[复制链接]
发表于 2016-10-27 19:00:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 疾风。意破天晴 于 2016-10-27 19:29 编辑

        本作品纯属出于技术交流的目的才诞生的。请与使用后24小时删除所爬资源,将所爬资源发布后果自负,果壳网是个有良心的好网站,无意中伤,如有任何有损其名声的事,请见谅

附加模块:BeautifulSoup4        用户界面:tkinter        主要技术:多进程        IDE:IDLE
        写这只爬虫的原因是有很多文章都太好了,想珍藏,但又不方便一个一个弄,太费时间,细想一下珍藏一页文章所做的操作都大致相同,我们都不想要网页上的广告啊,神马评论啊,之类的与文章内容无关的东西。所以我就先去了一个我最喜欢的科普网站——果壳网。
过程既思路:
        我先进入她的主页,找到她的好文章呈现的板块——科学人,然后看了一下分类,有两种,我取按学科分类,感觉这样爬起来更科学;url的差别也显而易见,然后看单页,这里值得一提的是她采用了——AJAX——(不知道的读者请百度OR接着读)说白了就是等你的滚动条到底了,她就自动发送一条请求把将要加载页面的信息要过来,发送和接受都是在JS里进行的,关键就是在接收到的信息里,(查看发送的目的url的方法就是用你浏览器的省察元素下的network下的XHR,一动态加载就有一个请求)我观察到,接收到的信息里有很多相同的结构,每一个结构里都有一个叫“id”的属性,并且就是文章页面的url最后几位,网站是把文章页面统一放在一个路径下管理的,这个id就是查找文章页面的唯一途径。然后思路就清晰了。一只多进程的爬虫(本来准备用多线程,但是想挑战一下自己排查错误的能力,结果多搞了一天就因为那个错误,我后面再说-_-,另外这个程序的文件读写是互不冲突的,用多进程效率更高,python的多线程只能做到并发,只有多进程才能做到并行,原因读者可自行搜索)分别爬不同科目,她是异步加载,那我也就异步爬取,单个的进程先爬取每个学科主页固定的18个词条,然后再根据需求深入爬取。把每一个页面先做好”洁净处理”,再添加图片,最后保存。


        在编程过程中遇到几个问题是很基本也是很常见的给大家说一下:
1.编码问题:如果你要保存网页等文件,你用        open(路径,'wt')        如果网页是utf-8编码它会报错:"gbk"
not 、 、 、 、那是因为在windows平台下默认创建一个新文本是采用gbk编码的形式保存写入的数据,但你的数据已经是utf-8的编码了,它不能解析所以报错,正确的方法是:        open(路径,'wt',encoding = "utf-8")
2.文件名问题,windows下文件名不能为                <>?*|/\":                当你想把一些文字当成文件名时就要注意了,我的子进程最开始老莫名其妙的自动关闭,后来单进程调试才发现这个问题。

还有其他一些技术细节请读我的代码,我已经详细的做好了注释,我抱着谦虚的态度,期待读者的建议。

我觉的喜欢科学的应该比喜欢爱情动作片的人多是吧

游客,如果您要查看本帖隐藏内容请回复


爬取结果.jpg
















干净的开头.jpg
纯净的文章.jpg
洁净的结尾.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-10-27 19:31:00 | 显示全部楼层
看看                  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-27 20:11:36 | 显示全部楼层
【多进程爬虫】为科学而生的爬虫——爬向果壳的过客。。爱科学的应该比爱岛片的人多吧
进程线程分不清
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 20:14:39 | 显示全部楼层
本帖最后由 疾风。意破天晴 于 2016-10-27 20:16 编辑
无符号整形 发表于 2016-10-27 20:11
【多进程爬虫】为科学而生的爬虫——爬向果壳的过客。。爱科学的应该比爱岛片的人多吧
进程线程分不清{:10 ...


最近  wei_Y  不是出了一个 《 一手画圈一手画圆——Python多线程  》的文章么,你可以看看啊。
看懂了线程,再区分进程就容易了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-27 20:16:05 | 显示全部楼层
疾风。意破天晴 发表于 2016-10-27 20:14
最近  wei_Y  不是出了一个 《 一手画圈一手画圆——Python多线程  》的文章么,你可以看看啊。{:10_256: ...

多线程我早就会啦~
Windows sdk里经常要用多线程~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 20:17:47 | 显示全部楼层
无符号整形 发表于 2016-10-27 20:16
多线程我早就会啦~
Windows sdk里经常要用多线程~

那你是哪里分不清呢?我会尽我所能给你解释的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-27 20:20:02 | 显示全部楼层
疾风。意破天晴 发表于 2016-10-27 20:17
那你是哪里分不清呢?我会尽我所能给你解释的。

我是说你啊~
我就给你解释解释~
《Windows核心编程》说过:进程是惰性的,本身并不执行任何代码
真正执行代码的是线程,一个进程里面有很多线程。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 20:22:49 | 显示全部楼层
本帖最后由 疾风。意破天晴 于 2016-10-27 20:30 编辑
无符号整形 发表于 2016-10-27 20:20
我是说你啊~
我就给你解释解释~
《Windows核心编程》说过:进程是惰性的,本身并不执行任何 ...


。。。但这是多进程啊,multiprocessing模块的作用就是干这个的。如果你不相信,请你把我的代码在你的电脑上运行一下,看一下任务管理器里的进程管理就知道了。你如果非要叫这个真的话,那如何区分多进程与多线程呢?如果我错了,请你纠正我。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 22:38:29 | 显示全部楼层
本帖最后由 疾风。意破天晴 于 2016-10-27 22:45 编辑

我写了一篇关于多进程与多线程的帖子,如果有什么地方不对欢迎各位指正
论多线程与多进程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-27 22:38:31 | 显示全部楼层
不错,我更关心有没有现成爬好的文章可以看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-27 22:43:00 | 显示全部楼层
jerryxjr1220 发表于 2016-10-27 22:38
不错,我更关心有没有现成爬好的文章可以看

嗯的,就是为了让更多的人看到那些有趣的科学文章也要把这个贴顶起来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-27 23:00:08 | 显示全部楼层
看看如何爬AJAX
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-28 11:49:46 | 显示全部楼层
我觉的喜欢科学的应该比喜欢爱情动作片的人多是吧
^^^^感觉楼主好幸福,可以长到这么大了还这么天真...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 13:15:54 | 显示全部楼层
本帖最后由 疾风。意破天晴 于 2016-10-28 13:17 编辑
呆鸭 发表于 2016-10-28 11:49
我觉的喜欢科学的应该比喜欢爱情动作片的人多是吧
^^^^感觉楼主好幸福,可以长到这么大了还这么天真...{:5 ...


我还能怎么说啊,自我欺骗一下,找一下安慰呗,虽然这回的作品比上次的从技术上好了很多,但我知道会回贴的人肯定比上次的差远啦,我们这个论坛算不错的了,真正奔着讨论技术来的人都不多。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-28 16:06:01 | 显示全部楼层
疾风。意破天晴 发表于 2016-10-28 13:15
我还能怎么说啊,自我欺骗一下,找一下安慰呗,虽然这回的作品比上次的从技术上好了很多,但我知道会回 ...

我就是奔着技术来的喔,只是个性疏懒,虽然编程多年,仍然技术浅薄,绝大多数时候只能做个看客,看着诸位大神高来高去,我也只有目瞪口呆的份...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-28 16:23:55 | 显示全部楼层
我以为是动作片爬虫。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 16:38:32 | 显示全部楼层
呆鸭 发表于 2016-10-28 16:06
我就是奔着技术来的喔,只是个性疏懒,虽然编程多年,仍然技术浅薄,绝大多数时候只能做个看客,看着诸位 ...

                其实没必要先给自己定义为个性疏懒的看客啦,其实你如果肯花时间去达到自己的一些目的,总能做出点什么的。我也是一个人干坐了两天,解决了很多蛋疼的以前都没遇到过的问题才能把它做出来的。如果你想做出点什么的话,就给自己一个目的,让目的指引你学习的方向,比如你是想收集一些你感兴趣的数据,还是想要分析你收集的数据,不要怕学习新东西,因为你知道自己是想达到自己心里的那个目的的,我就是一直这么告诉自己的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-28 16:39:39 | 显示全部楼层
EvanX 发表于 2016-10-28 16:23
我以为是动作片爬虫。。

估计你是没看我标题而直接看我名字了。。。很抱歉给大众这么个映像。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-28 16:48:49 | 显示全部楼层
疾风。意破天晴 发表于 2016-10-28 16:38
其实没必要先给自己定义为个性疏懒的看客啦,其实你如果肯花时间去达到自己的一些目的,总能做出点什么 ...

谢谢楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-28 17:41:10 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 09:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表