Pythonはテンセントニュースキャプチャを実現します。

13123 ワード

考え方:
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
<!-- ページ- の のビット->