一个爬取近百万数据的Python爬虫

栏目: Python · 发布时间: 6年前

内容简介:一个爬取近百万数据的Python爬虫

菜鸟独白

我写爬虫也有一段时间了,目前还没有爬过百万级的数据.前段时间身体不舒服,冬天是流感的高发季节,一直没有写原创的文章,很多铁杆粉丝也非常关心我,留言询问!非常感谢大家的关心,周末我身体稍微好点了,于是我想自己也没有爬过百万级的数据,要不就试试看爬一个百万数据吧.

01百万级的数据

1.目标网站的选择

这次我选择的是大名鼎鼎的Stackoverflow, 程序员心中有两大圣殿。一个是GitHub里面有很多很多好的库和源码,一个就是Stackoverflow里面有很多大牛帮忙回答问题。我们打开Stackoverflow,然后搜索 Python 相关的问题:

一个爬取近百万数据的Python爬虫

2.页面分析

发现一共有88万多个问题,再看一下页面的列表规律,我们按照每页最大显示50个问题,一共有17776页,数据非常大

一个爬取近百万数据的Python爬虫

02爬虫的策略

目前为止我还没有爬过这么大的数据量,这次看来必须要用神器了scrapy.其实在用神器之前,我们自己写了多并发的多线程池,我测了一下速度还可以,爬取500个数据大概有6秒左右,跟scrapy差不多

一个爬取近百万数据的Python爬虫

但是考虑到稳定性和方便扩展性,还是用Scrapy比较方便一些

1.页面的爬取

scrapy的文章和资料非常多,基础知识这里我就不细细讲解.scrapy的内置功能非常强大,如果玩爬虫scrapy是必须要学习的,使用起来需要按照它的套路,就像乐高玩具一样,一块一块的搭起来就可以.下面我们讲一下几个关键的点:

1).页面列表的构建

整个的stackoverflow上关于Python的问题页面非常规整,我们可以很容易的构建列表,比如前1000页range(1,1000),range(1000,2000):

一个爬取近百万数据的Python爬虫

2).单页面的爬取

我们用scrapy genspider产生一个spider文件,我们用这个文件主要爬取页面的内容,每个问题的内容都非常的规则,我们用css非常容易可以提取:

一个爬取近百万数据的Python爬虫

我们主要提取问题标题,问题描述,view,vote,answers,提问时间和用户的名字这7个维度

一个爬取近百万数据的Python爬虫

2.数据的存储

我们需要在items.py里面构建一个存储的数据结构类,把这个7个特征存起来

一个爬取近百万数据的Python爬虫

然后在上面的spider类里面把页面解析的数据一一对于存起来

item = StackoverflowItem()item['desc'] = descitem['title']=titleitem['view']=viewitem['answer']=answeritem['vote']=voteitem['start'] = startitem['user'] = useryield item

03大规模的爬取

看起来好像一切顺利,于是我们开始运行爬虫爬取,大概爬取12000个数据左右,IP就会被封掉,大量的429 错误代码会出现.很明显有反爬的策略.这个时候我们的本机IP已经封掉了,这个时候想要继续爬取,有两个办法:

第一种办法:用代理IP

1).构建一个随机的代理池

网上免费的代理IP池很多,我们可以自己本地解析这些网页构建一个代理池,存在数据库里面,也可以访问一个付费的稳定的代理.

2).构建一个下载的中间价

Scrapy强大之处在于,它给了我们很多接口,扩展性非常好!基本上爬虫的方方面面它都内置了,类似Django真是居家旅行必备。我们只需要几行代码就能搞定

一个爬取近百万数据的Python爬虫

不要忘记了在Setting里面配置一下:

DOWNLOADER_MIDDLEWARES = {'stackoverflow.middlewares.RandomProxyMiddleware': 543,}

但是代理的ip非常不稳定,尤其是免费的。而且代理IP爬取的时间会比本机更慢,毕竟中间加了中转

第二种方法:重启猫继续用本机IP

一般重启家里的路由器有的时候会换本机的IP地址,因为本机的IP地址爬取的速度是最快,然后放慢爬取的速度,加一些delay.

我采用了第二种方法,爬了999页大概49950条数据,并且放慢了速度,大概需要20分钟左右

一个爬取近百万数据的Python爬虫

我们一共有近90万的数据需要爬取,如果按照这样的速度去爬取的话,大概需要7个小时才能完全爬取完毕。Scrapy提供了非常完善的异常处理和log分析,即使我们中间爬取出错了,我们依然可以获得已经爬取的数据.当然有条件的话可以放在服务器上去爬取,速度会更快.

04尝鲜看一下数据

数据长啥样,我们随机拿5条出来看一下,数据比较粗糙没有经过清洗,里面比较有价值的是它的view值和answer值,还有时间和标题

一个爬取近百万数据的Python爬虫

目前才近10万条的数据,我们先尝鲜看一下,里面最火的一个问题被998个人围观:

一个爬取近百万数据的Python爬虫

结论:

百万数据的爬取其上没有我们想象的那么难,只要熟练使用框架,控制爬取的速度,分段爬取还是可以的! 如果有稳定的代理池和高性能的服务器那就更爽啦。等我全部爬取完毕之后,我也想知道Stackoverflow上面关于Python有哪些非常火的问题,大家都在关心Python哪些方面,这近百万的数据时间分布如何,敬请期待吧!

End.


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据挖掘技术

数据挖掘技术

[美]MichaelJ.A.B / 别荣芳、尹静、邓六爱 / 机械工业 / 2006-7 / 49.00元

本书是数据挖掘领域的经典著作,数年来畅销不衰。全书从技术和应用两个方面,全面、系统地介绍了数据挖掘的商业环境、数据挖掘技术及其在商业环境中的应用。自从1997年本书第1版出版以来,数据挖掘界发生了巨大的变化,其中的大部分核心算法仍然保持不变,但是算法嵌入的软件、应用算法的数据库以及用于解决的商业问题都有所演进。第2版展示如何利用基本的数据挖掘方法和技术,解决常见的商业问题。 本书涵盖核心的数......一起来看看 《数据挖掘技术》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试