python爬取腾讯新闻_Python 实现腾讯新闻抓取

思路:

3.在详细页中提取新闻标题和内容

4.去除提取内容中的html标签,生成txt文档

代码:

1 #coding=utf-8

2 importsys3 importurllib24 importre5 importos6

7 defextract_url(info):8 rege="http://news.qq.com/a/\d{8}/\d{6}.htm"

9 re_url =re.findall(rege, info)10 returnre_url11

12 defextract_sub_web_title(sub_web):13 re_key = "

.+"

14 title =re.findall(re_key,sub_web)15 returntitle16

17 defextract_sub_web_content(sub_web):18 re_key = "

"

19 content =re.findall(re_key,sub_web)20 returncontent21

22 deffilter_tags(htmlstr):23 re_cdata=re.compile('//]*//\]\]>',re.I) #匹配CDATA

24 re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script

25 re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',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\n',s)#将

转换为换行

33 s=re_h.sub('',s) #去掉HTML 标签

34 s=re_comment.sub('',s)#去掉HTML注释

35 blank_line=re.compile('\n+')#去掉多余的空行

36 s=blank_line.sub('\n',s)37 returns38

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 whileTrue:50 f.write(str(i-14)+"\r\n")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\n"+sub_content[0])60 f.write(re_content.decode("gb2312").encode("utf-8"))61 f.write("\r\n")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_log' doesn't exist

今天没事调试一下DJANGO框架的时候官方的例子出现如下错误在这记录一下吧~!

原因:数据库未同步

解决方法:python manage.py syncdb

2.IndentationError: unexpected indent python

原因:缩进错误

解决方法:删除缩进,统一用tab,注意tab设置为4空格

3.[Errno

9] Bad file descriptor

原因:读文件用了 fileopen(filename,”w”)

解决方法:fileopen(filename,”r”)

4.IndexError:

list index out of range

原因:for i in range(len(List))

del len(List)

在动态删除List过程中越界

解决办法:不要动态删除,采用两个List操作

5.TypeError: expected string or buffer

原因:re_h=re.compile('?\w+[^>]*>')

s=re_h.sub('',str)

传入的str是list变量导致出错

解决办法:传入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-8set mouse=a

set nu

set foldmethod=indent

set sw=4set ts=4set smarttab

set spell

set tw=78set lbr

set fo+=mB

set t_Co=256 //颜色覆盖问题,默认的效果太差

colorscheme default//配色方案

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值