初试 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 简易数据采集组件 怎么说他是一个简易的数据采集组件呢?因为由于时间仓促,缺少从某 ...
随机推荐
- CentOS7 一个网卡配置多个IP地址
1.给网卡p8p1新创建配置文件(复制原来的p8p1,修改IP地址即可) ifcfg-p8p1:0 vim /etc/sysconfig/network-scripts/ifcfg-p8p1:0 D ...
- layui学习地址
--layui学习地址 ,相当之好用,非常感谢为我们工作和学习提供方便的才子们,谢谢~https://www.layui.com/demo/layim.html
- Iris Classification on Keras
Iris Classification on Keras Installation Python3 版本为 3.6.4 : : Anaconda conda install tensorflow==1 ...
- python MySQLdb 如何设置读超时read_timeout
在python中,经常用到 MySQLdb操作MySQL数据库. 在实现上,MySQLdb并不是纯python的,而是封装了MySQL C API库_mysql. 对于MySQLdb是否支持read_ ...
- 查看进程CPU、内存使用情况
本文介绍通过ps和top查看进程的cpu.内存等使用情况. 1.ps命令 1.1 概览 ps命令相关参数定义: -e 或者-A,选择所有的进程: -L 显示线程: -o 自定义输出格式: 输出格式: ...
- 三十四:数据库之SQLAlchemy外建及四种约束
使用SQLAlchemy创建外建,只需要在子表的字段中指定此字段的外建是哪个表的哪个字段即可,字段类型需和父表下该字段的类型保持一致 使用ondelete指定约束, 外建约束有以下几种:1.RESTR ...
- ALV程序设计
ALV 全称SAP LIST VIEW, 是SAP所提供的一个强大的数据报表显示工具. ALV显示格式分为GRID及LIST两种,两者所显示数据一致, GRID模式在每个输出字段提供选择按钮,允许用 ...
- python学习之模块-模块(四)
5.9 logging模块 常用参数 logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有: filename:用指定的文件名创建FiledHan ...
- [开发技巧]·TopN指标计算方法
[开发技巧]·TopN指标计算方法 1.概念介绍 在图片分类的中经常可以看到Top-1,Top-5等TopN准确率(或者时错误率). 那这个TopN是什么意思呢?首先Top-1准确率最好理解,就是 ...
- adobe Keychain mac
Keychain password access This question has been Answered. janec2070563 May 8, 2018 11:07 AM I consta ...