1 __author__ = ‘minmin‘ 2 #coding:utf-8 3 import re,urllib,sgmllib 4 5 #根据当前的主页url获取html 6 def getHtml(url): 7 page = urllib.urlopen(url) 8 html = page.read() 9 page.close() 10 return html 11 12 13 #html链接的标签是“a”,链接的属性是“href”,也就是要获得html中所有tag=a,attrs=href 值。 14 class URLPaser(sgmllib.SGMLParser): 15 def reset(self): 16 sgmllib.SGMLParser.reset(self) 17 self.urls = [] 18 19 def start_a(self,attrs): 20 href = [v for k,v in attrs if k == ‘href‘] 21 if href: 22 self.urls.extend(href) 23 24 #根据html获取想要的文章内容 25 def func(str): 26 #用正则表达式提取自己想要获取的内容 27 result = re.findall(r"<P style=\"TEXT-INDENT: 2em\">([^<>]*)<\/P>",getHtml(url),re.M) 28 artical =‘‘ 29 for j in result: 30 if len(j)<>0: 31 j = j.replace("<STRONG>"," ")#去掉<STRONG>,换成" " 32 j = j.replace("</STRONG>"," ")#去掉</STROGN>换成" " 33 artical = artical + j + ‘\n‘ 34 return artical 35 36 37 IParser = URLPaser() 38 socket = urllib.urlopen("http://finance.qq.com/")#打开主页 39 40 IParser.feed(socket.read())#开始分析处理 41 42 reg = ‘http://finance.qq.com/a/.*‘#用来匹配符合条件的链接,使用正则表达式匹配 43 44 pattern = re.compile(reg) 45 46 i = 0 47 url2 = [] 48 for url in IParser.urls:#链接都存在urls里 49 50 if pattern.match(url):#匹配符合条件的链接 51 artical = func(url)#调用函数func 52 if url not in url2:#重复的url不再进行提取文章内容 53 url2.append(url) 54 print url 55 if len(artical)<>0:#如果文章捏弄内容不为空 56 print artical 57 i = i + 1 58 #这个文件地址是文件保存地址,可根据要保存位置自己进行相应的更改 59 f = open("qq/Economy/"+str(i) + ‘.txt‘,‘a+‘)#把提取的内容按顺序保存在相应文件夹中 60 f.write(artical) 61 f.close() 62 63 64 ################################################################################################################# 65 #注:本文借鉴http://www.jb51.net/article/52062.htm 66 #并在其基础上改进的 重复的url不再进行爬取,并把提取的内容写到指定的文件夹中 67 #################################################################################################################
时间: 2024-10-12 21:46:15