python如何编写爬虫程序_python编写网络爬虫程序
工作了,需要抓取一些特定的资源进行分析。没有高速海量数据那么大的需求。所以想到用python直接写一个简单的爬虫,之后再编写模板进行定向解析,就解决问题了。毕竟我们的时间要求和数量级要求不是很高。
在网上搜索了一些python编写爬虫的文档,下载下来试试,看看效果。虽然我的这篇文章标明是原创,但是文章中也有一部分是参考了别人的信息,请谅解。因为我是想参考别人的精华,组合重构,来实现我需要的系统。
Test.py
# -*- coding: utf-8 -*-
import WebCrawler
url = raw_input('设置入口url(例-->http://www.baidu.com): \n')
thNumber = int(raw_input('设置线程数:')) #之前类型未转换出bug
Maxdepth = int(raw_input('最大搜索深度:'))
wc = WebCrawler.WebCrawler(thNumber, Maxdepth)
wc.Craw(url)
WebCrawler.py
# -*- coding: utf-8 -*-
import threading
import GetUrl
import urllib
g_mutex = threading.Lock()
g_pages = [] #线程下载页面后,将页面内容添加到这个list中
g_dledUrl = [] #所有下载过的url
g_toDlUrl = [] #当前要下载的url
g_failedUrl = [] #下载失败的url
g_totalcount = 0 #下载过的页面数
class WebCrawler:
def __init__(self,threadNumber,Maxdepth):
self.threadNumber = threadNumber
self.threadPool = []
self.Maxdepth = Maxdepth
self.logfile = file('#log.txt','w') ##
def download(self, url, fileName):
Cth = CrawlerThread(url, fileName)
self.threadPool.append(Cth)
Cth.start()
def downloadAll(self):
global g_toDlUrl
global g_totalcount
i = 0
while i < len(g_toDlUrl):
j = 0
while j < self.threadNumber and i + j < len(g_toDlUrl):
g_totalcount += 1 #进入循环则下载页面数加1
self.download(g_toDlUrl[i+j],str(g_totalcount)+'.htm')
print 'Thread started:',i+j,'--File number = ',g_totalcount
j += 1
i += j
for th in self.threadPool:
th.join(30) #等待线程结束,30秒超时
self.threadPool = [] #清空线程池
g_toDlUrl = [] #清空列表
def updateToDl(self):
global g_toDlUrl
global g_dledUrl
newUrlList = []
for s in g_pages:
newUrlList += GetUrl.GetUrl(s) #######GetUrl要具体实现
g_toDlUrl = list(set(newUrlList) - set(g_dledUrl)) #提示unhashable
def Craw(self,entryUrl): #这是一个深度搜索,到g_toDlUrl为空时结束
g_toDlUrl.append(entryUrl)
self.logfile.write('>>>Entry:\n') ##
self.logfile.write(entryUrl) ##
depth = 0
while len(g_toDlUrl) != 0 and depth <= self.Maxdepth:
depth += 1
print 'Searching depth ',depth,'...\n\n'
self.downloadAll()
self.updateToDl()
content = '\n>>>Depth ' + str(depth)+':\n' ##
self.logfile.write(content) ##
i = 0 ##
while i < len(g_toDlUrl): ##
content = str(g_totalcount + i + 1) + '->' + g_toDlUrl[i] + '\n'# ##
self.logfile.write(content) ##
i += 1 ##
class CrawlerThread(threading.Thread):
def __init__(self, url, fileName):
threading.Thread.__init__(self)
self.url = url #本线程下载的url
self.fileName = fileName
def run(self): #线程工作-->下载html页面
global g_mutex
global g_failedUrl
global g_dledUrl
try:
f = urllib.urlopen(self.url)
s = f.read()
fout = file(self.fileName, 'w')
fout.write(s)
fout.close()
except:
g_mutex.acquire() #线程锁-->锁上
g_dledUrl.append(self.url)
g_failedUrl.append(self.url)
g_mutex.release() #线程锁-->释放
print 'Failed downloading and saving',self.url
return None #记着返回!
g_mutex.acquire() #线程锁-->锁上
g_pages.append(s)
g_dledUrl.append(self.url)
g_mutex.release() #线程锁-->释放
GetUrl.py
# -*- coding: cp936 -*-
urlSep = ['','//','(',')', r'"', r"'", ' ', '\t', '\n']
urlTag = ['http://']
def is_sep(ch):
for c in urlSep:
if c == ch:
return True
return False
def find_first_sep(i,s):
while i < len(s):
if is_sep(s[i]):
return i
i+=1
return len(s)
def GetUrl(strPage):
rtList = []
for tag in urlTag:
i = 0
i = strPage.find(tag, i, len(strPage))
while i != -1:
begin = i
end = find_first_sep(begin+len(tag),strPage)
rtList.append(strPage[begin:end])
i = strPage.find(tag, end, len(strPage))
return rtList
python如何编写爬虫程序_python编写网络爬虫程序相关推荐
- python网络爬虫入门小程序_Python 实现网络爬虫小程序
转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 ...
- 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...
- c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...
用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...
- 基于python的网络爬虫开题报告_网络爬虫开题报告.docx
网络爬虫开题报告 网络爬虫开题报告 篇一:毕设开题报告 及开题报告分析 开题报告如何写 注意点 1.一.对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二.阅读文献资料进 ...
- Python之网络爬虫(爬虫基本认知、网络爬虫之路)
文章目录 一.爬虫基本认知 二.爬虫之路 初级爬虫工程师 中级爬虫工程师 高级爬虫工程师 一.爬虫基本认知 1.爬虫的简单定义 网络爬虫,又称为网页蜘蛛.蚂蚁.蠕虫.模拟程序,在FOAF社区中,被称为 ...
- python3.6爬虫库_python3.6 网络爬虫
<精通Python网络爬虫:核心技术.框架与项目实战>--导读 前 言 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引擎中,主要使用通用网络爬虫 ...
- 爬虫的基本原理:网络爬虫、爬虫基本流程、解析方式、保存数据
爬虫的基本原理:网络爬虫.爬虫基本流程.解析方式 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集 ...
- 常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)
常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10) 文章目录 联系方式 反爬虫策略 文本混淆 SVG映射 CSS文字偏移 图片混淆伪装 字体反爬 Referer字段反爬 数据分 ...
- 爬虫分类——通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫
爬虫分类 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫.聚焦网络爬虫.增量式网络爬虫.深层网络爬虫. 实际的网络爬虫系统通常是几种爬虫技术相结合实现的 通用网络爬虫 通用网络 ...
- python爬虫程序说明_Python即时网络爬虫:API说明
API说明--下载gsExtractor内容提取器 1,接口名称 下载内容提取器 2,接口说明 如果您想编写一个网络爬虫程序,您会发现大部分时间耗费在调测网页内容提取规则上,不讲正则表达式的语法如何怪 ...
最新文章
- mysql二进制文件复制_MySQL 主从复制:基于二进制文件复制配置详解
- 云原生架构下的持续交付实践
- hdu 4417 Super Mario 树状数组||主席树
- app启动页数秒加载 代码_干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)
- (转)二分图最大匹配的König定理及其证明
- deque iterator not dereferencable 问题
- 无偏移谷歌瓦片地址_下载谷歌高清无偏移卫星地图
- QQ空间相册照片批量导出
- 好好说话之hijack retaddr
- 如何用Appium连接并操作手机App
- RT-Preempt笔记
- Set接口介绍、HashSet源码简要分析
- UVALive 6436 The Busiest City
- 央行930新政启动房贷证券化 将撬动10万亿进楼市
- Echarts 水波图实现
- [人工智能-深度学习-1]:主流深度学习框架比较、排名
- 苹果手机怎么定位安卓手机_苹果手机和安卓手机不同使用感受
- 用matlab计算连续函数卷积的表达式
- yoloV5-6.2分类训练记录
- 预制菜掀起的餐饮零售化热潮,只是“局部风口”