原文地址:http://www.cnblogs.com/rails3/archive/2012/08/14/2636780.htm

思路:

1.抓取腾讯新闻列表页面: http://news.qq.com/

2.提取详细页面的url:http://news.qq.com/a/20120814/000070.htm

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

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

代码:

 #coding=utf-8
import sys
import urllib2
import re
import os def extract_url(info):
rege="http://news.qq.com/a/\d{8}/\d{6}.htm"
re_url = re.findall(rege, info)
return re_url def extract_sub_web_title(sub_web):
re_key = "<title>.+</title>"
title = re.findall(re_key,sub_web)
return title def extract_sub_web_content(sub_web):
re_key = "<div id=\"Cnt-Main-Article-QQ\".*</div>"
content = re.findall(re_key,sub_web)
return content def filter_tags(htmlstr):
re_cdata=re.compile('//<!\[CDATA\[[^>]*//\]\]>',re.I) #匹配CDATA
re_script=re.compile('<\s*script[^>]*>[^<]*<\s*/\s*script\s*>',re.I)#Script
re_style=re.compile('<\s*style[^>]*>[^<]*<\s*/\s*style\s*>',re.I)#style
re_p=re.compile('<P\s*?/?>')#处理换行
re_h=re.compile('</?\w+[^>]*>')#HTML标签
re_comment=re.compile('<!--[^>]*-->')#HTML注释
s=re_cdata.sub('',htmlstr)#去掉CDATA
s=re_script.sub('',s) #去掉SCRIPT
s=re_style.sub('',s)#去掉style
s=re_p.sub('\r\n',s)#将<p>转换为换行
s=re_h.sub('',s) #去掉HTML 标签
s=re_comment.sub('',s)#去掉HTML注释
blank_line=re.compile('\n+')#去掉多余的空行
s=blank_line.sub('\n',s)
return s #get news
content = urllib2.urlopen('http://news.qq.com').read() #get the url
get_url = extract_url(content) #generate file
f = file('result.txt','w')
i = 15 #新闻起始位置,前面几条格式不一致
flag = 30
while True:
f.write(str(i-14)+"\r\n") #get the sub web title and content
sub_web = urllib2.urlopen(get_url[i]).read()
sub_title = extract_sub_web_title(sub_web)
sub_content = extract_sub_web_content(sub_web) #remove html tag
if sub_title != [] and sub_content != []:
re_content = filter_tags(sub_title[0]+"\r\n"+sub_content[0])
f.write(re_content.decode("gb2312").encode("utf-8"))
f.write("\r\n")
else:
flag = flag +1 if i == flag:
break i = i + 1
print "Have finished %d news" %(i-15)
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-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 //配色方案

l

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   //配色方案

Python 实现腾讯新闻抓取的更多相关文章

  1. Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  2. python爬虫beta版之抓取知乎单页面回答(low 逼版)

    闲着无聊,逛知乎.发现想找点有意思的回答也不容易,就想说要不写个爬虫帮我把点赞数最多的给我搞下来方便阅读,也许还能做做数据分析(意淫中--) 鉴于之前用python写爬虫,帮运营人员抓取过京东的商品品 ...

  3. 利用python脚本(xpath)抓取数据

    有人会问re和xpath是什么关系?如果你了解js与jquery,那么这个就很好理解了. 上一篇:利用python脚本(re)抓取美空mm图片 # -*- coding:utf-8 -*- from ...

  4. Python爬虫实战四之抓取淘宝MM照片

    原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...

  5. Python爬虫实战六之抓取爱问知识人问题并保存至数据库

    大家好,本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表 ...

  6. 一次Python爬虫的修改,抓取淘宝MM照片

    这篇文章是2016-3-2写的,时隔一年了,淘宝的验证机制也有了改变.代码不一定有效,保留着作为一种代码学习. 崔大哥这有篇>>小白爬虫第一弹之抓取妹子图 不失为学python爬虫的绝佳教 ...

  7. Python爬虫之使用正则表达式抓取数据

    目录 匹配标签 匹配title标签 a标签 table标签 匹配标签里面的属性 匹配a标签里面的URL 匹配img标签里的 src 相关文章:Linux中的正则表达式 Python中的正则表达式 实例 ...

  8. Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

    1,引言 在Python网络爬虫内容提取器一文我们详细讲解了核心部件:可插拔的内容提取器类gsExtractor.本文记录了确定gsExtractor的技术路线过程中所做的编程实验.这是第二部分,第一 ...

  9. python:利用asyncio进行快速抓取

    web数据抓取是一个经常在python的讨论中出现的主题.有很多方法可以用来进行web数据抓取,然而其中好像并没有一个最好的办法.有一些如scrapy这样十分成熟的框架,更多的则是像mechanize ...

随机推荐

  1. java 课后作业

    杨辉三角 组合数 public class YH { public static void main(String agrs[]) { int a[5][5],i,j; for(i = 0;i < ...

  2. 【设计模式】 模式PK:策略模式VS桥梁模式

    1.概述 我们先来看两种模式的通用类图. 两者之间确实很相似.如果把策略模式的环境角色变更为一个抽象类加一个实现类,或者桥梁模式的抽象角色未实现,只有修正抽象化角色,想想看,这两个类图有什么地方不一样 ...

  3. PHP网页架站

    目前,Windows下已经有集成的PHP网页架站工具,例如:AppServ.WampServer.这些软件将Apache.PHP.MySQL.phpMyAdmin集成到一起,极大地方便了开发者架站.但 ...

  4. LTC 钱包部署

    基础环境 系统: CentOS 7.x nodejs: v4.6.0 zeromq: 4.x 安装nodejs + zeromq 基础依赖 yum install -y gcc make gcc-c+ ...

  5. bzoj 3450 DP

    首先我们设len[i]表示前i位,从第i位往前拓展,期望有多少个'o',那么比较容易的转移 len[i]=len[i-1]+1 s[i]='o' len[i]=0 s[i]='x' len[i]=(l ...

  6. this可以通过call改变的测试

  7. 代码合并:Merge、Rebase 的选择

    图解 Git 命令 基本用法 上面的四条命令在工作目录.stage 缓存(也叫做索引)和 commit 历史之间复制文件. git add files 把工作目录中的文件加入 stage 缓存 git ...

  8. JSX语法规范

    1.只有一个开始节点和一个尾节点 正确的写法 ReactDOM.render( <div>hello,你好</div>, document.body ) 错误的写法,开始节点和 ...

  9. aptitude约等于apt-get的工具

    如题,与之不同的是其会将依赖的程序也给删除. https://baike.baidu.com/item/aptitude/6849487?fr=aladdin 以下是一些常用 aptitude命令,仅 ...

  10. jq 浏览器窗口大小发生变化时

    当调整浏览器窗口的大小时,发生 resize 事件: $(selector).resize(); 实例 对浏览器窗口调整大小进行计数: $(window).resize(function() { $( ...