初试 pyhton 简易采集
一。安装软件(用eclispe 搭建好环境好,没有取省自动补全编写代码会很卡,最后选用sumblie)
eclispe 用的windows 32 4.31
python 用的 4.3.3 下载地址
pydev 用的2.4`
二。目录结构
三.各模块代码 ,调度器 spider_main.py, url管理器 url_manager.py, 网页下载器 html_downloader.py, 网页数据解析器 html_parser.py
采集数据输出 html_outputer.py
.spider_main.py import sys
import os
curPath = os.path.abspath(os.path.dirname(__file__))
rootPath = os.path.split(curPath)[]
sys.path.append(rootPath)
from baike_spider import url_manager, html_downloader, html_parser,html_outputer class SpiderMain(object):
def __init__(self):
# url 管理器, 模板下载器,下载数据解析器,解析数据输入器。 模块调度器
self.urls = url_manager.UrlManager()
self.downloader = html_downloader.HtmlDownloader()
self.parser = html_parser.HtmlParser()
self.outputer = html_outputer.HtmlOutputer() def craw(self,root_url):
count =
self.urls.add_new_url(root_url) while self.urls.has_new_url():
try:
new_url = self.urls.get_new_url()
print (count,new_url)
# print craw (' %d : %s') % (count,new_url)
html_cont = self.downloader.download(new_url)
new_urls,new_data = self.parser.parse(new_url,html_cont)
self.urls.add_new_urls(new_urls)
self.outputer.collect_data(new_data)
if count == :
break count = count + except:
print ('craw fail') self.outputer.output_html() if __name__ =="__main__":
root_url = "http://baike.baidu.com/view/21087.htm"
obj_spider = SpiderMain()
obj_spider.craw(root_url) .url_manager.py class UrlManager(object):
def __init__(self):
self.new_urls = set()
self.old_urls = set() def add_new_url(self,url):
if url is None:
return
if url not in self.new_urls and url not in self.old_urls:
self.new_urls.add(url) def add_new_urls(self,urls):
if urls is None or len(urls) == :
return
for url in urls:
self.add_new_url(url) def has_new_url(self):
return len(self.new_urls) != def get_new_url(self):
new_url = self.new_urls.pop()
self.old_urls.add(new_url)
return new_url . html_downloader.py import urllib.request
#print (urllib.request)
class HtmlDownloader(object): def download(self,url):
if url is None:
return None response = urllib.request.urlopen(url) if response.getcode() != :
return None
return response.read()
#obj = HtmlDownloader()
#obj.download("http://baike.bai du.com/view/21087.htm") .html_parser.py from bs4 import BeautifulSoup
import re
#import urlparse
#import urllib.request class HtmlParser(object): def _get_new_urls(self,page_url,soup):
new_urls = set()
links = soup.find_all("a",href=re.compile(r"/view/\d+\.htm"))
for link in links:
new_url = link['href']
# print(new_url)
new_full_url = "http://baike.baidu.com"+new_url
# print (new_full_url)
new_urls.add(new_full_url) return new_urls def _get_new_data(self,page_url,soup):
res_data = {}
res_data['url'] = page_url
ttile_node = soup.find('dd',class_="lemmaWgt-lemmaTitle-title").find("h1") res_data['title'] = ttile_node.get_text() summary_node = soup.find("div",class_="lemma-summary")
res_data['summary'] = summary_node.get_text()
return res_data def parse(self,page_url,html_cont):
if page_url is None or html_cont is None:
return soup = BeautifulSoup(html_cont,'html.parser',from_encoding = "utf-8")
# print (soup)
new_urls = self._get_new_urls(page_url,soup)
# print (new_urls)
new_data = self._get_new_data(page_url,soup)
return new_urls, new_data #test = HtmlParser()
#response = urllib.request.urlopen("http://baike.baidu.com/view/21087.htm")
#test.parse("http://baike.baidu.com/view/21087.htm",response.read()) .html_outputer.py class HtmlOutputer(object):
def __init__(self):
self.datas = [] def collect_data(self,data):
if data is None:
return
self.datas.append(data) def output_html(self): # print(self.datas)
fout = open('output.html',"w") fout.write("<html>")
fout.write("<body>")
fout.write("<table>") for data in self.datas:
# print(data['url'])
# print(data['title'])
# print(data['summary'])
fout.write("<tr>")
fout.write("<td>%s</td>" % data['url'].encode('utf-8').decode("utf-8"))
fout.write("<td>%s</td>" % data['title'].encode('utf-8').decode("utf-8"))
# fout.write("<td>%s</td>" % data['summary'].encode('utf-8').decode("utf-8"))
fout.write("</tr>") fout.write("</table>")
fout.write("</body>")
fout.write("</html>
view
submlie 中 Ctrl+B 运行。
初试 pyhton 简易采集的更多相关文章
- python实现简易采集爬虫
#!/usr/bin/python #-*-coding:utf-8-*- # 简易采集爬虫 # 1.采集Yahoo!Answers,parseData函数修改一下,可以采集任何网站 # 2.需要sq ...
- QT 初试 MainWindow简易窗体
1.创建一个空的QT工程文件 2 建立程序文件 MainWindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include<QMainWind ...
- querylist 在laravel框架中的简单采集数据(专业5)
//爬虫网站路由Route::get('/querylist/list','querylistControllers@querylist'); //控制器 <?phpnamespace App\ ...
- 搭建简易的WebServer(基于pyhton实现简易Web框架 使用socket套接字)
1. 使用web底层socket的方式实现简易服务器的搭建,用来理解学习 # 1.导入socket模块 import socket import re import gevent import sys ...
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ ...
- 【应用笔记】【AN003】VC++环境下基于以太网的4-20mA电流采集
简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC++环境下进行温度采集,实现WINDOWS平台对数据的采集.分析及显示 ...
- 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)
版本:第一版 作者:毛鹏 杨帅 日期:20151108 简介 4-20mA电流环具有广泛的应用前景,在许多行业中都发挥着重要作用.本文主要介绍了以太网接口的4-20mA电流采集模块在VC#环境下进行温 ...
- 实现简易的android 直播技术
Android 的直播,主要使用的是camera采集的数据推流到服务器上,在客户端播放camera采集的数据.采用SurfaceView+ SurfaceTexture来显示camera数据, Sur ...
- 【干货】.NET开发通用组件发布(三) 简易数据采集组件
组件介绍和合作开发 http://www.cnblogs.com/MrHuo/p/MrHuoControls.html 简易数据采集组件 怎么说他是一个简易的数据采集组件呢?因为由于时间仓促,缺少从某 ...
随机推荐
- ftp反向代理配置
说明:源ftp在内网,访问在另一个内网,要求用户对真实ftp地址透明,且免密访问. 1.将ftp配置为被动模式,指定被动访问端口映射出来. // vsftp配置被动模式,列出主要配置 connect_ ...
- IJCAI 2019 Analysis
IJCAI 2019 Analysis 检索不到论文的关键词:retrofitting word embedding Getting in Shape: Word Embedding SubSpace ...
- Nova 启动虚拟机流程解析
目录 文章目录 目录 前言 从请求说起 nova-api service 阶段 前言 Nova 启动虚拟机的东西太多,持续更新- 从请求说起 无论是通过 Dashboard 还是 CLI 启动一个虚拟 ...
- 阶段3 2.Spring_07.银行转账案例_4 编写事务管理工具类并分析连接和线程解绑
事务管理工具类 首先需要有connection.并且是当前线程上的connection.声明connectionUtils.提供set方法等着spring来注入 有异常需要放在事务里面 close关闭 ...
- 系统分析与设计HW9
使用 ECB 实现 make reservation 用例的详细设计(包含用例简介,顺序图,类图) 用例简介: 搜索酒店 1.1 选择城市 1.2 选择日期 生成订单 2.1 选择酒店 2.2 选择日 ...
- Salesforce学习之路-developer篇(五)一文读懂Aura原理及实战案例分析
1. 什么是Lightning Component框架? Lightning Component框架是一个UI框架,用于为移动和台式设备开发Web应用程序.这是一个单页面Web应用框架,用于为Ligh ...
- 在Windows服务器安装ss服务端用于逃脱公司行为管理
1.安装:python-2.7.14.amd64.msi 2.配置环境变量 3.Win64OpenSSL-1_0_2n.exe 4.安装ss服务端:pip install **adowsocks 5. ...
- python学习之网络基础
七 网络编程 7.1 C/S B/S架构 7.1.1 认识 Client : 客户端 Browser :浏览器 Server :服务器端 C/S:客户端与服务器之间的构架 B/S:浏览器与服务器之间的 ...
- 关于Qt中的QMutex——关于lock与unlock
大概说一下用法,例子: QMutex mutex; int number = 6; void method1() { mutex.lock(); number *= 5; number /= 4; m ...
- 【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片
最近想熟悉一下深度学习,体验了一下Caffe,简单写写训练和分类的过程: 1.下载Caffe VS2013工程:https://github.com/Microsoft/caffe 2. 解压并用VS ...