python爬虫
2016-05-20 11:24
357 查看
经过一周的尝试,终于把一个能够一直爬取网页的爬虫写出来了。
写爬虫之前,要先确定爬虫的结构,在进行模块化的编写;
一个简单爬虫需要什么?
需要把网页下载下来, 需要把网页中的数据解析出来, 需要把网页内部的链接加入到待爬取的队列中, 然后把数据储存下来!
确定了需要的东西,我们就可以开始编写爬虫了;
首先定义四个模块,DataStore
由于我将url和data全部在数据库中储存着, 这样就可以只需要三个模块完成就可以了,UrlDownloader, UrlParser, DataStore。
好,现在开始编写爬虫。
开始编写主函数, 这是我的主函数SpiderMain;
![](https://img-blog.csdn.net/20160520112112814?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
这是我在pycharm里面编写的, 在外部运行的话,不需要
![](https://img-blog.csdn.net/20160520112302941?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
只需要
![](https://img-blog.csdn.net/20160520112323286?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中这三个.py文件与主函数在同一文件夹下
开始写三个模块的东西
1.UrlDownloader
其中herder和安装cookie是为了模拟浏览器访问, urllib.request.urlopen这个函数中, 加入的timeout参数是为了规定访问一个网页的最长时间如果还没访问到就直接跳出
![](https://img-blog.csdn.net/20160520112339709?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
2.UrlParser
![](https://img-blog.csdn.net/20160520112359022?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
解析器用的是正则表达式和lxml, 关于lxml的安装,这里不说
这个爬虫解析的是百度百科的词条,以及他的描述
![](https://img-blog.csdn.net/20160520112417350?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
爬取别的网页时,编写对应的正则,或者直接用解析器就可以了
3.DataStore
![](https://img-blog.csdn.net/20160520112434147?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中__init__()是初始化数据库的参数, add_new_url是添加一个url, 是爬虫起始的url, add_new_urls
是添加多个url, 此时需要判断待添加的url是否已经爬过,或者说已经添加的待爬取的队列, 如果两者都没有, 加入待爬取的队列
Add_new_data就是把获得的内容存下来, gets_urls_numbers是获取待爬取的url有多少, 太多的话就不用往里面添加了, get_data_numbers是为了获取数据的数量, get_new_url 是从待爬取的url队列中拿出一个,爬取并将它加入到已爬取的队列中, close是关闭数据库
写爬虫之前,要先确定爬虫的结构,在进行模块化的编写;
一个简单爬虫需要什么?
需要把网页下载下来, 需要把网页中的数据解析出来, 需要把网页内部的链接加入到待爬取的队列中, 然后把数据储存下来!
确定了需要的东西,我们就可以开始编写爬虫了;
首先定义四个模块,DataStore
由于我将url和data全部在数据库中储存着, 这样就可以只需要三个模块完成就可以了,UrlDownloader, UrlParser, DataStore。
好,现在开始编写爬虫。
开始编写主函数, 这是我的主函数SpiderMain;
这是我在pycharm里面编写的, 在外部运行的话,不需要
只需要
其中这三个.py文件与主函数在同一文件夹下
开始写三个模块的东西
1.UrlDownloader
其中herder和安装cookie是为了模拟浏览器访问, urllib.request.urlopen这个函数中, 加入的timeout参数是为了规定访问一个网页的最长时间如果还没访问到就直接跳出
2.UrlParser
解析器用的是正则表达式和lxml, 关于lxml的安装,这里不说
这个爬虫解析的是百度百科的词条,以及他的描述
爬取别的网页时,编写对应的正则,或者直接用解析器就可以了
3.DataStore
其中__init__()是初始化数据库的参数, add_new_url是添加一个url, 是爬虫起始的url, add_new_urls
是添加多个url, 此时需要判断待添加的url是否已经爬过,或者说已经添加的待爬取的队列, 如果两者都没有, 加入待爬取的队列
Add_new_data就是把获得的内容存下来, gets_urls_numbers是获取待爬取的url有多少, 太多的话就不用往里面添加了, get_data_numbers是为了获取数据的数量, get_new_url 是从待爬取的url队列中拿出一个,爬取并将它加入到已爬取的队列中, close是关闭数据库
相关文章推荐
- Python日期时间模块的解析与操作
- Win7中,关于VMware下的Ubuntu的一点记录
- Python查询本地外网IP实例
- [Tool] Python几个windows版本的区别
- Python FTP实现
- [python]时间操作
- Python中的Numpy、SciPy、MatPlotLib安装与配置
- Python 2.x闭包(enclosure)中的变量访问&修改
- python getopt使用
- python的JSON与字典区别
- Python 面向对象 —— 特殊函数
- Python Modbus_tk在树莓派上实现rtu master
- 用pyenv和virtualenv搭建单机多版本python虚拟开发环境
- python---pyc pyo文件详解
- Python 日期处理
- Python fabric实践操作
- Python fabric远程自动部署简介
- python fabric实现远程操作和部署
- Python进阶
- python 安装预编译库注意事项-pip