工作了,需要抓取一些特定的资源进行分析。没有高速海量数据那么大的需求。所以想到用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编写网络爬虫程序相关推荐

  1. python网络爬虫入门小程序_Python 实现网络爬虫小程序

    转载请注明作者和出处: http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 前言 ...

  2. 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述

    本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...

  3. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  4. 基于python的网络爬虫开题报告_网络爬虫开题报告.docx

    网络爬虫开题报告 网络爬虫开题报告 篇一:毕设开题报告 及开题报告分析 开题报告如何写 注意点 1.一.对指导教师下达的课题任务的学习与理解 这部分主要是阐述做本课题的重要意义 2.二.阅读文献资料进 ...

  5. Python之网络爬虫(爬虫基本认知、网络爬虫之路)

    文章目录 一.爬虫基本认知 二.爬虫之路 初级爬虫工程师 中级爬虫工程师 高级爬虫工程师 一.爬虫基本认知 1.爬虫的简单定义 网络爬虫,又称为网页蜘蛛.蚂蚁.蠕虫.模拟程序,在FOAF社区中,被称为 ...

  6. python3.6爬虫库_python3.6 网络爬虫

    <精通Python网络爬虫:核心技术.框架与项目实战>--导读 前 言 为什么写这本书 网络爬虫其实很早就出现了,最开始网络爬虫主要应用在各种搜索引擎中.在搜索引擎中,主要使用通用网络爬虫 ...

  7. 爬虫的基本原理:网络爬虫、爬虫基本流程、解析方式、保存数据

    爬虫的基本原理:网络爬虫.爬虫基本流程.解析方式 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集 ...

  8. 常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10)

    常见的一些反爬虫策略(下篇)-Java网络爬虫系统性学习与实战系列(10) 文章目录 联系方式 反爬虫策略 文本混淆 SVG映射 CSS文字偏移 图片混淆伪装 字体反爬 Referer字段反爬 数据分 ...

  9. 爬虫分类——通用网络爬虫、聚焦网络爬虫、增量式网络爬虫、深层网络爬虫

    爬虫分类 网络爬虫按照系统结构和实现技术,大致可以分为以下几种类型:通用网络爬虫.聚焦网络爬虫.增量式网络爬虫.深层网络爬虫. 实际的网络爬虫系统通常是几种爬虫技术相结合实现的 通用网络爬虫 通用网络 ...

  10. python爬虫程序说明_Python即时网络爬虫:API说明

    API说明--下载gsExtractor内容提取器 1,接口名称 下载内容提取器 2,接口说明 如果您想编写一个网络爬虫程序,您会发现大部分时间耗费在调测网页内容提取规则上,不讲正则表达式的语法如何怪 ...

最新文章

  1. mysql二进制文件复制_MySQL 主从复制:基于二进制文件复制配置详解
  2. 云原生架构下的持续交付实践
  3. hdu 4417 Super Mario 树状数组||主席树
  4. app启动页数秒加载 代码_干货 | App 自动化测试痛点(弹框及首页启动加载完成判断处理)
  5. (转)二分图最大匹配的König定理及其证明
  6. deque iterator not dereferencable 问题
  7. 无偏移谷歌瓦片地址_下载谷歌高清无偏移卫星地图
  8. QQ空间相册照片批量导出
  9. 好好说话之hijack retaddr
  10. 如何用Appium连接并操作手机App
  11. RT-Preempt笔记
  12. Set接口介绍、HashSet源码简要分析
  13. UVALive 6436 The Busiest City
  14. 央行930新政启动房贷证券化 将撬动10万亿进楼市
  15. Echarts 水波图实现
  16. [人工智能-深度学习-1]:主流深度学习框架比较、排名
  17. 苹果手机怎么定位安卓手机_苹果手机和安卓手机不同使用感受
  18. 用matlab计算连续函数卷积的表达式
  19. yoloV5-6.2分类训练记录
  20. 预制菜掀起的餐饮零售化热潮,只是“局部风口”

热门文章

  1. 基于51单片机的无线测温系统
  2. python 图片中的表格识别
  3. ads1256 + STM32 + CubeMX 软件开发备忘
  4. 中职教计算机专业发展,中等职业教育中计算机专业教育思考
  5. 程序员求职之道(《程序员面试笔试宝典》)之看着别人手拿大把的offer,不淡定了怎么办?
  6. 应用之星:H5制作又出一利器,分分钟刷爆朋友圈
  7. 计算机网络-自顶向下方法 读书笔记
  8. 使用HEXO搭建个人博客时遇到的问题日志 PART.1
  9. IT新人的辛酸反省与总结
  10. Apache FTPServer本地部署FTP服务