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 + '
'
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 #################################################################################################################