资源描述
python爬取网页表格篇一:python抓取网页数据用python抓取页面并进行处理2009-02-19 15:09:50|分类:Python|标签:无|字号 订阅主要目的:抓取某个网页的源代码,把里面需要的数据进 行处理,并保存到数据库中。已经实现了抓取页面并读取数 据。步骤一、抓取页面,这一步很简单,引入urllib,用urlopen 打开网址,并用read()方法读取数据。为了方便测试,用本 地文本文件代替抓取网页步骤二、处理数据,如果页面代码比较规范标准,可以用 HTMLParser进行简单处理,只是具体情况需要具体分析,感觉还是用正则比较好一些,顺便练习一下刚学习的正则表 达式。其实正则也是一种比较简单的语言,其中符号比较 多,有点晦涩难懂,只能是多加练习,多加实践了。步骤三、把处理的数据保存到数据库中,用pymssql就可 以处理,这里只是简单的保存到文本文件中。扩展下去,利用这个功能还可以实现抓取整个网站的图片、自动声称site map文件等功能。下一个任务,研究python 的socket功能#coding:gbkimport urllibimport re#pageiurllib.urlopen(/index.html)#data=pagenread()#pageEclose()f=open(rD:2.txt)data=f.read()f.close()#处理数据p=pile('(?<=class=one.).+?(?=</div</div)',re.I|re.S)m=p.findall(data)s=for datan in m:#继续处理数据,取出标题、简介、图片和链接地址p_title=pile('(?<=<h2.).+?(?=</h2)',re.I|re.S)2p_url=pile('(?<=href=.).+?(?=)',re.I|re.S)p_summar=pile('(?(<=<p.).+?(?=</p)(',re.I|re.S)p_image=pile('/eshop/images/.+?(?=)',re.I|re.S)s=s+标题:+p_title.search(datan).group()+rn+f+p_summa nsearc h(datan).gro up()+rn+图 片+p_image.search(datan).group()+rn+p_urLsearch(datan).group()+rnf=open(rD:2.txt,'w')f.write(s)f.close()链接地址介:用Python脚本获取实时股市信息2006-12-15 13:47IE查看股市信息太过招摇,决定写个Python脚本抓取相 关信息,小巧便捷。1.先写段Python脚本抓取股票行情查询页面。这个很简 3单。发现个股实时行情数据都是写在javascript文件当中。2.提取该javascript文件URL,写Python脚本抓取该文 件。读取其内容,做字符串处理,提取股价,涨幅等信息。搞定。3.针对部分需要设置HTTP代理才可访问网络的需求,通过 urnib.open('*',proxies='*')设置代理,非常方便。4.通过对javascript文件URL的分析,其文件名形式是 股票代码.js。建立一个配置文件,提供所关注的股票代码。用Python脚本实现读取配置信息,定时读取所需实时信息。5.定义每日行情格式,以XML形式存储。6.日后可以Python脚本实现读取存储的行情信息生成报 表,K线等图形信息。篇二:python完成网页抓取的工作python完成网页抓取的工作python语言是自省的,就是说他的语言机制能保证他可 以充分的自己描述自己,下面我就借助自省,用程序自身的说 明来解释程序的逻辑结构,版本历史,以及设计时的想法.#encoding:UTF-8'''This is geturl.Wirtten by yuzebin:yuzebin AT 4Important:this script is running in cygwin or linux,if you run at windows you need the curl and wget for windows.'''class='''CGetPage is charge of to get a url,it have three methods to get a page:urllib,curl and wget;CParsePage is charge of to parse the page,and return the match;CGetMatch is the forcad class to wrap the CGetPage and CParsePage.'''history='''2006.07.10 version 0.0.0.9:Publish this code to internet,;-)2006.06.27 version 0.0.0.7:refrectoring class CParsePage:return re.match onlyrefrectoring class CGetCount:rename to CGetMatch2006.06.26 version 0.0.0.3:modify class CParsePage,return re.match2006.06.22 version 0.0.0.2:add class CGetCountthis version is the first workable version.add cnsky.2006.06.21 initial version 0.0.0.1:5add class CGetPage and CParsePagecannot work;-)'''importstring,re,os,fnmatch,sys,copy,gzip,time,datetime,urllibfrom types import*isDebugMode=FalsefuncUrlRead=lambda url:urllib.urlopen(url).read()def funcOutputMessage(msg):print str(msg)def funcDebuglnfo(msg):if(isDebugMode=True):print str(msg)class CGetPage:def_init_(self,url):if self.urlCheck(url)=True:self.url=urlelse:return Nonedef urlCheck(self,url):#todo,check the url is valid urLreturn True6def getPage(self):self.page=funcUrlRead(self.url)def curlPage(self):#call curl to get a page,this requir curl is installed.self.page=os.popen(curl-A/-s/+self.url+/).read()def setP ath(self,pat h):self.path=pathdef wgetPage(self):#call wget to download a url to path,this requir wget is installed.os.chdir(self.path)os.system('wget-c'+self.url)class CParsePage:def _init_(self,rule,page):if(self.ruleCompile(rule)!=False):self.page=pageelse:return Nonedef ruleCompile(self,rule):#compile the ruletry:self.rule=pile(rule)7except:return Falsedef parsePage(self):self,match=re.search(self.rule,unicode(self.page,self.getCharset(self.page)funcDebugInfo(type(self.match)def getCharset(self,string):import chardet#todo:automatic discern the charsetcharset=chardet.detect(string)return charset'encoding'class CGetMatch:def_init_(self,url,rule):self.url=urlself,rule=ruleself.cgetpage=CGetPage(self.url)se If.cgetpage.getP age()self.page=self.cgetpage.pageself.cparsepage=CParsePage(self.rule,self.cgetpage.page)def getMatch(self,url,rule):8self.url=urlself,rule=ruleself.cgetpage.url=urlself.cparsepage.rule=rulese If.cgetpage.getP age()self.page=self.cgetpage.pagese If.cpa rsepage.page=self.cgetpage.pagese If.cpa rsepage.pa rsePage()self,match=se If.cpa rsepage.matchif_name_='_main_':funcOutputMessage('=This is a get urlscript=')runTest()def runTest():#initializationccount=CGetMatch('.cn','')i=0#1try:site name='huajun'rule='hit/587/=/'47588,(0-9+)'url='/soft/23265.html'9i+=1ccount.getMatch(url,rule)funcOutputMessage(str(i).rjust(2)+';'+sitename.ljust(12)+':'+str(ccount.match.group(l)except:pass篇三:抓取网页数据如何抓取网页数据、分析并且去除Html标签(C#)2008年 09月20日星期六 下午07:25首先将网页内容整个抓取下 来,这个我就不说了,不是本次话题的重点。假设抓取的数 据放在RecvBuffer这个byte口中(数据从网络上传输过来时 不是字符串的形式而是byte),那么我们的第一步就是将 RecvBuffer转化为String,以便于对其操作,实例如下:/将接收到的数据增加到响应字符串中strResponse+=Encoding.ASCILGetString(RecvBuffei;0,nBytes);strResponse即是保存数据的字符串,此处用系统自 带 的 System.Text.Encoding 的 方法转 化 RecvBuffer,GetString的第一个参数RecvBuffer就是我们的原始数据,即包含需要解码的字节序列的字节数组;第二个参数。代表 第一个要解码的字节的索引,一般就从0开始;第三个参数 nBytes为要解码的字节数,可以自己调整。10得到了数据的字符串形式,然后可以对网页进行解析了(其实就是对字符串的各种操作和正则表达式的应用)。下 面我以几个例子来说明对网页数据的解析:/解析页面,查找链接/此处尚需扩展,还有某些形式的链接不被识别string strRef=(href|HREF|src|SRC|action|ACTION|Action)*=* 9;hCollection matches=newRegex(strRef).Matches(strResponse);strStatus+=找到I:+matches.Count+个链接rn;上面的 例子将网页中的链接解析出来,strRef变量表示了正则表达 式的模式,变量matches表示符合匹配的项目的集合,后面 的 Regex(strRef).Matches(strRes(转 载于:wWW.xlTkWJ.Com 小 龙文 档 网:python爬取网页表 格)ponse)就是创建正则规则使得strResponse里符合strRef 模式的字符串都返回。然后调用matches的变量就可以取得 各种信息了。当然,这里只能识别一些基本的链接形式,像script中的 链接和一些不带“,的链接都没有被支持,这个的扩展还是蛮 简单的。再举几个更简单点的解析的例子,大家学习学习:获取标题itMatch Title Match=Regex.Match(strResponse,<title(egexOptions.IgnoreCase|RegexOptions.Multiline);title=TitleMatch.Gro ups 1.Va lue;获取描述信息Match Desc=Regex.Match(strResponse,&It;Meta name=DESCRIP TION content=(strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)12Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<,<);strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。RegexOptions.IgnoreCase|RegexOptions.Multiline);strdesc=Desc.Groupsfl.Value;获取网页的大小size=strResponse.Length;割13好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII<param name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<,strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:14把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=EReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。RegexOptio ns.Igno reCase|RegexOptions.Multiline);title=TitleMatch.Gro ups 1.Va lue;获取描述信息Match Desc=Regex.Match(strResponse,&It;Meta name=DESCRIP TION content=(strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summary15Ill将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<9<);strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。16RegexOptions.IgnoreCase|RegexOptio ns.Multiline);strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<9strOutput=strOutput.Replace(,);17return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。#39;#+'MatchCollection matches=newRegex(strRef).Matches(strResponse);strStatus+=找到I:+matches.Count+个链接rn;上面的 例子将网页中的链接解析出来,strRef变量表示了正则表达 式的模式,变量matches表示符合匹配的项目的集合,后面 的 Regex(strRef).Matches(strRes(转 载于:wWW.xlTkWJ.Com 小 龙文 档 网:python爬取网页表 格)ponse)就是创建正则规则使得strResponse里符合strRef 模式的字符串都返回。然后调用matches的变量就可以取得 18各种信息了。当然,这里只能识别一些基本的链接形式,像script中的 链接和一些不带“,的链接都没有被支持,这个的扩展还是蛮 简单的。再举几个更简单点的解析的例子,大家学习学习:获取标题Match Title Match=Regex.Mate h(strRespo nse,<title(egexOptions.IgnoreCase|RegexOptions.Multiline);title=TitleMatch.Gro ups 1.Va lue;获取描述信息Match Desc=Regex.Match(stResponse,&It;Meta name=DESCRIP TION content=(strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summary19Ill将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<9strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。20RegexOptions.IgnoreCase|RegexOptions.Multiline);strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<9strOutput=strOutput.Replace(,);21return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。RegexOptions.IgnoreCase|RegexOptions.Multiline);title=TitleMatch.Gro ups 1.Va lue;获取描述信息Match Desc=Re ge x.Ma to h(s t rRe s po nse,&It;Meta name=DESCRIP TION content=(strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;割22好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returnsprivate string stripHtml(string strHtml)(Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<9<);strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:23把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。RegexOptions.IgnoreCase|RegexOptions.Multiline);strdesc=Desc.Groupsl.Value;获取网页的大小size=strResponse.Length;-割好了,下面说一下如何去除Html标签,这个想必有很 多初学者很需要。其实还是正则表达式和字符串基本操作的 应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:1*1111<summaryIII将Html标签转化为空格III</summaryIII&It;pa ram name=strHtml 待转化的字符串</paramIII&It;returns 经过转化的字符串</returns24private string stripHtml(string strHtml)Regex objRegExp=new Regex(<(.|n)+?);string strOutput=objRegExp.Replace(strHtml,);strOutput=strOutput.Replace(<,strOutput=strOutput.Replace(,);return strOutput;ok,这样一来Html标签就基本没了,但是有些例外会 使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实 是将Html标签转化为了空格。太多连续的空格会影响之后 对字符串的操作。所以再加入这样的语句:把所有空格变为一个空格Regex r=new Regex(s+);wordsOnly=rReplace(strResponse,);wo rds O nly.Trim();好了,大功告成,这里的 wordsOnly 便是我们最终的成果-一去除了 Html标签,并去除了多余空 格的字符串。25
展开阅读全文