coding=UTF-8

import html_download
import html_outputer
import html_parser
import url_maneger class SpiderMain(object):
# 构造器
def __init__(self):
# 1:初始化组件
self.urls = url_maneger.urlManeger()
self.downloader = html_download.htmlDownload()
self.parser = html_parser.htmlParser()
self.outputer = html_outputer.htmlOutputer() def crawl(self, root_url):
# 2:定义爬取方法
count = 1
self.urls.add_new_url(root_url)
while self.urls.has_new_url():
# a.判断是否有新的url
try:
new_url = self.urls.get_new_url()
print('正在爬取:' + new_url)
# b.获得一个url
html_cont = self.downloader.download(new_url)
# c.下载url内容
new_urls, data = self.parser.parse(new_url, html_cont)
# d.解析url内容,得到新的列表和数据
self.urls.add_new_urls(new_urls)
# e.把列表添加到url未读列表
self.outputer.collect_data(data)
# f.获取解析结果 count = count + 1
except:
print('error page') if count == 10000:
break
self.outputer.output() if __name__ == "__main__":
root_url = 'http://baike.baidu.com/item/python' # 爬取起点
spider = SpiderMain()
spider.crawl(root_url)

spider_main.py的更多相关文章

  1. python爬虫—爬取百度百科数据

    爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数 ...

  2. Python 开发轻量级爬虫08

    Python 开发轻量级爬虫 (imooc总结08--爬虫实例--分析目标) 怎么开发一个爬虫?开发一个爬虫包含哪些步骤呢? 1.确定要抓取得目标,即抓取哪些网站的哪些网页的哪部分数据. 本实例确定抓 ...

  3. Python开发轻量级爬虫

    这两天自学了python写爬虫,总结一下: 开发目的:抓取百度百科python词条页面的1000个网页 设计思路: 1,了解简单的爬虫架构: 2,动态的执行流程: 3,各部分的实现: URL管理器:p ...

  4. Python抓取百度百科数据

    前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...

  5. python爬虫慕课基础2

    实战演练:爬取百度百科1000个页面的数据 对于新手来说,可以把spider_main.py代码中的try和except去掉,运行报错就会在控制台出现,根据错误去调试自己的程序 发现以下错误: req ...

  6. 自己动手python打造渗透工具集

    难易程度:★★★阅读点:python;web安全;文章作者:xiaoye文章来源:i春秋关键字:网络渗透技术 前言python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈 ...

  7. Python开发简单爬虫

    简单爬虫框架: 爬虫调度器 -> URL管理器 -> 网页下载器(urllib2) -> 网页解析器(BeautifulSoup) -> 价值数据 Demo1: # codin ...

  8. python打造渗透工具集

    python是门简单易学的语言,强大的第三方库让我们在编程中事半功倍,今天我们就来谈谈python在渗透测试中的应用,让我们自己动手打造自己的渗透工具集. 难易程度:★★★阅读点:python;web ...

  9. 用python编写简单爬虫

    需求:抓取百度百科python词条相关词条网页的标题和简介,并将数据输出在一个html表格中 入口页:python的百度词条页 https://baike.baidu.com/item/Python/ ...

随机推荐

  1. Java Programming Guidelines

    This appendix contains suggestions to help guide you in performing low-level program design and in w ...

  2. WorkFlow 的 Xaml 中找不到引用类型

    原来还是需要两步走. 1. 在refernece里面应用project或dll. 2. 在xaml的命名空间里面手动添加.

  3. Trouble Shooting的一些感想(实时补充)

    最近一直做两个产品功能的Merge工作,代码Merge过来之后,发现了很多问题.经过Trouble Shooting,最终发现归根结底都是我们Merge的问题,例如有的Code没有Merge过来,Me ...

  4. time和datetime模块

    在Python中,通常有这几种方式来表示时间: 1)时间戳 2)格式化的时间字符串  3)元组(struct_time)共九个元素. 由于Python的time模块实现主要调用C库,所以各个平台可能有 ...

  5. Homestead 安装 phpMyAdmin 作为数据库管理客户端 — Laravel 实战 iBrand API 教程

    简介 phpMyAdmin 是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的数据库管理工具,让管理者可用Web接口管理MySQL数据库.借由此Web接口可以成为一个简易方式输 ...

  6. windows 2008 R2-Zabbix server 3.0监控主机的加入

    一.关闭windows防火墙或者开通10050和10051端口 (1).关闭防火墙 开始—控制面板—windows防火墙 按照要求关闭防火墙 (2).开通端口 1.开始—管理工具--高级安全windo ...

  7. 浏览器中使用calc不识别

    在使用css3中的calc运算函数时,发现浏览器不识别,当时代码是这样的 width:calc(100%-50px); 经过查询官网原来发现这里有个需要注意的地方就是在进行加减运算的时候,必须在运算符 ...

  8. Facebook interview problem:13. Roman to Integer

    description: Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symb ...

  9. mysql主从分离

    1.工具: 两台机器 master:192.168.0.1 slave:192.168.0.2 2.master的配置 找到mysql的配置文件,一般centos的是/etc/my.cnf,ubunt ...

  10. 【转载】#324 - A Generic Class Can Have More than One Type Parameter

    A generic class includes one or more type parameters that will be substituted with actual types when ...