|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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下文件名不能为 <>?*|/\": 当你想把一些文字当成文件名时就要注意了,我的子进程最开始老莫名其妙的自动关闭,后来单进程调试才发现这个问题。
还有其他一些技术细节请读我的代码,我已经详细的做好了注释,我抱着谦虚的态度,期待读者的建议。
我觉的喜欢科学的应该比喜欢爱情动作片的人多是吧
|
|