Pythonはテンセントニュースキャプチャを実現します。
13123 ワード
考え方:
1.騰訊ニュースリストページをキャプチャする:http://news.qq.com/
2.詳細ページのurlを抽出する:http://news.qq.com/a/20120814/000070.htm
3.ニュースのタイトルと内容を詳細ページから抽出する
4.抽出内容のhtmlタグを削除し、txt文書を作成する。
コード:
1.騰訊ニュースリストページをキャプチャする:http://news.qq.com/
2.詳細ページのurlを抽出する:http://news.qq.com/a/20120814/000070.htm
3.ニュースのタイトルと内容を詳細ページから抽出する
4.抽出内容のhtmlタグを削除し、txt文書を作成する。
コード:
1 #coding=utf-8
2 import sys
3 import urllib2
4 import re
5 import os
6
7 def extract_url(info):
8 rege="http://news.qq.com/a/\d{8}/\d{6}.htm"
9 re_url = re.findall(rege, info)
10 return re_url
11
12 def extract_sub_web_title(sub_web):
13 re_key = ".+ "
14 title = re.findall(re_key,sub_web)
15 return title
16
17 def extract_sub_web_content(sub_web):
18 re_key = ""
19 content = re.findall(re_key,sub_web)
20 return content
21
22 def filter_tags(htmlstr):
23 re_cdata=re.compile('//]*//\]\]>',re.I) # CDATA
24 re_script=re.compile(']*>[^',re.I)#Script
25 re_style=re.compile(']*>[^',re.I)#style
26 re_p=re.compile('')#
27 re_h=re.compile('?\w+[^>]*>')#HTML
28 re_comment=re.compile('')#HTML
29 s=re_cdata.sub('',htmlstr)# CDATA
30 s=re_script.sub('',s) # SCRIPT
31 s=re_style.sub('',s)# style
32 s=re_p.sub('\r
',s)#
33 s=re_h.sub('',s) # HTML
34 s=re_comment.sub('',s)# HTML
35 blank_line=re.compile('
+')#
36 s=blank_line.sub('
',s)
37 return s
38
39 #get news
40 content = urllib2.urlopen('http://news.qq.com').read()
41
42 #get the url
43 get_url = extract_url(content)
44
45 #generate file
46 f = file('result.txt','w')
47 i = 15 # ,
48 flag = 30
49 while True:
50 f.write(str(i-14)+"\r
")
51
52 #get the sub web title and content
53 sub_web = urllib2.urlopen(get_url[i]).read()
54 sub_title = extract_sub_web_title(sub_web)
55 sub_content = extract_sub_web_content(sub_web)
56
57 #remove html tag
58 if sub_title != [] and sub_content != []:
59 re_content = filter_tags(sub_title[0]+"\r
"+sub_content[0])
60 f.write(re_content.decode("gb2312").encode("utf-8"))
61 f.write("\r
")
62 else:
63 flag = flag +1
64
65 if i == flag:
66 break
67
68 i = i + 1
69 print "Have finished %d news" %(i-15)
70 f.close()
:
urllib2 :
re :
decode("gb2312").encode("utf-8"): gb2312 utf-8
filter_tags: html ,baidu ,
デバッグ に した :
1.Table'polls.django_admin_ロゴ'doesn't existは は です。DJ ANGOフレームを してみます。 の は のように いがあります。ここに してください。
:データベースが されていません。
:python manage.py syncdb
2.Indentation Err: unexpected indent python
:インデントエラー
:インデントを して、 にtabを って、tabが4スペースに することに します。
3.[エリン9]Bad file descripter
:ファイルを んでfileopenを いました。
:fileopen(filename)「r」
4.IndexError:list index out of range
:for i in range(len(List))
del len(List)
Listを に する でオフラインする
: に せず、2つのList を する。
5.TypeError:expected string or buffer :re_h=re.co mpile('?\w+[>*>') s=re_h.sub(',str)
のstrはリスト です。エラーが しました。
: str
: のvim
カタログの に します。vimrcは のユーザーに を えません。syntax on
set fileencodings=utf-8,cp936,big5,euc-jp,euc-kr,latin1,ucs-bom
set fileencodings=utf-8,gbk
set ambiwidth=double
set langmenu=zh_CN.UTF-8
set mouse=a
set nu
set foldmethod=indent
set sw=4
set ts=4
set smarttab
set spell
set tw=78
set lbr
set fo+=mB
set t_Co=256 // ,
colorscheme default //
:https://www.cnblogs.com/rails3/archive/2012/08/14/2636780.html
<!-- ページ- の のビット->