Python 实现腾讯新闻抓取
来源:互联网 发布:java重载定义 编辑:程序博客网 时间:2024/05/20 10:21
转载自:http://www.cnblogs.com/rails3/archive/2012/08/14/2636780.html
思路:
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_url11 12 def extract_sub_web_title(sub_web):13 re_key = "<title>.+</title>"14 title = re.findall(re_key,sub_web)15 return title16 17 def extract_sub_web_content(sub_web):18 re_key = "<div id=\"Cnt-Main-Article-QQ\".*</div>"19 content = re.findall(re_key,sub_web)20 return content21 22 def filter_tags(htmlstr):23 re_cdata=re.compile('//<!\[CDATA\[[^>]*//\]\]>',re.I) #匹配CDATA24 re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script25 re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style26 re_p=re.compile('<P\s*?/?>')#处理换行27 re_h=re.compile('</?\w+[^>]*>')#HTML标签28 re_comment=re.compile('<!--[^>]*-->')#HTML注释29 s=re_cdata.sub('',htmlstr)#去掉CDATA30 s=re_script.sub('',s) #去掉SCRIPT31 s=re_style.sub('',s)#去掉style32 s=re_p.sub('\r\n',s)#将<p>转换为换行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 return s38 39 #get news40 content = urllib2.urlopen('http://news.qq.com').read()41 42 #get the url43 get_url = extract_url(content)44 45 #generate file46 f = file('result.txt','w')47 i = 15 #新闻起始位置,前面几条格式不一致48 flag = 3049 while True:50 f.write(str(i-14)+"\r\n")51 52 #get the sub web title and content53 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 tag58 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 +164 65 if i == flag:66 break67 68 i = i + 169 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 onset fileencodings=utf-8,cp936,big5,euc-jp,euc-kr,latin1,ucs-bom set fileencodings=utf-8,gbk set ambiwidth=doubleset langmenu=zh_CN.UTF-8set mouse=aset nuset foldmethod=indentset sw=4set ts=4set smarttabset spellset tw=78set lbrset fo+=mBset t_Co=256 //颜色覆盖问题,默认的效果太差colorscheme default //配色方案
- Python 实现腾讯新闻抓取
- Python 实现腾讯新闻抓取
- 抓取腾讯新闻评论
- python抓取新闻【华盛顿邮报】
- selenium 抓取 自己 评论的腾讯新闻
- 如何实现新闻自动抓取?
- Python 抓取【参考消息网站】的新闻
- python爬虫(抓取百度新闻列表)
- Python爬虫:抓取新浪新闻数据
- 第一个python爬虫 抓取新浪新闻
- python爬虫之爬取腾讯新闻
- Android 网页抓取(实现新闻客户端)
- Android 网页抓取(实现新闻客户端)
- Android 网页抓取(实现新闻客户端)
- 抓取新闻
- 基于python实现的抓取腾讯视频所有电影的爬虫
- iOS 类似扣扣微信中腾讯新闻的新闻列表实现
- Android实现腾讯新闻的新闻类别导航效果
- ArcGIS10.2许可无法启动解决办法
- 用正则表达式获取指定的字符串
- 阿里实习生电面题目(续):输出给定字符串的全部连续子串
- Linux系统中生成调试的core文件
- Migrating to cocos2d-iphone v3 – Tips & Tricks
- Python 实现腾讯新闻抓取
- spring set注入
- Tomcat部署Web应用1
- 一句话说明设计模式——适配器模式
- FFmepg 多线程解码历程 - 4:avcodec_open2
- java计算器的是实现
- 深入Java虚拟机(1)
- java 中 Hashtable 排序
- Oracle用户,权限,角色以及登录管理