工欲善其事,必先利其器。我们要进行数据挖掘,就必须先获取数据,获取数据的方法有很多种,其中一种就是爬虫。下面我们利用Python2.7,写一个爬虫,专门爬取中新网http://www.chinanews.com/scroll-news/news1.html滚动新闻列表内的新闻,并将新闻正文保存在以新闻类别命名的文件夹下的以该新闻的发布日期和顺序命名的文本中。具体代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import re
import urllib2
import sysreload(sys)
sys.setdefaultencoding('utf8')# 得到页面全部内容
def askURL(url):html = ''request = urllib2.Request(url)  # 发送请求try:response = urllib2.urlopen(request)  # 取得响应html = response.read()  # 获取网页内容# print htmlhtml = html.decode('gbk', 'ignore')  # 将gbk编码转为unicode编码html = html.encode('utf-8', 'ignore')  # 将unicode编码转为utf-8编码except urllib2.URLError, e:if hasattr(e, "code"):print e.codeif hasattr(e, "reason"):print e.reasonreturn html# 得到正文
def getContent(url):html = askURL(url)text = ''# 找到新闻主体所在的标签findDiv = re.compile(r'<div class="left_zw" style="position:relative">'r'(.*)<div id="function_code_page">', re.S)div = re.findall(findDiv, html)if len(div) != 0:content = div[0]labels = re.compile(r'[/]*<.*?>', re.S)text = re.sub(labels, '', content)  # 去掉各种标签text = re.sub(r'\s|中新社.*?电|\(完\)|\(记者.*?\)', '', text)  # 去掉空行和换行符,无关内容text = re.sub(r'  ', '\n', text)  # 将缩进符替换成换行符# print textreturn text# 根据类别按顺序命名文件
def saveFile(labelName, date, fileNum):dirname = "news"# 若目录不存在,就新建# 文件保存在程序的当前目录下if (not os.path.exists(dirname)):os.mkdir(dirname)labelName = labelName.encode('gbk', 'ignore')labelpath = dirname + '\\' + labelNameif (not os.path.exists(labelpath)):os.mkdir(labelpath)path = labelpath + "\\" + date + "-0" + str(fileNum) + ".txt"  # w文本保存路径print "正在下载" + path# path=path.encode('gbk','utf-8')#转换编码f = open(path, 'w+')return f# 得到正文的URL,读取正文,并保存
def getURL(nurl, labelName):html = askURL(nurl)findDiv = re.compile(r'<div class="dd_lm">.*</div>')findTime = re.compile(r'<div class="dd_time">(.*)</div>')# 旧的格式为findTitle=re.compile(r'<div class="dd_bt"><a href="http://www.chinanews.com/.*\.shtml">(.*)</a></div>')findTitle = re.compile(r'<div class="dd_bt"><a href="//www.chinanews.com/.*\.shtml">(.*)</a></div>')findURL = re.compile(r'<div class="dd_bt"><a href="(//www.chinanews.com/.*\.shtml)">.*</a></div>')findLabel = re.compile(r'<div class="dd_lm">\[<a href=//www.chinanews.com/.*\.shtml>(.*)</a>\]</div>')fileNum = 0for info in re.findall(findDiv, html):# print infotime = re.findall(findTime, info)[0]date = re.findall(r'\d?-\d*', time)[0]  # 获取新闻发布日期title = re.findall(findTitle, info)[0]# 添加上http头部url = 'http:' + re.findall(findURL, info)[0]  # 获取新闻正文的链接label = re.findall(findLabel, info)[0]  # 获取新闻所属类别if (label == "I&nbsp;&nbsp;T"):  # 网页为I&nbsp;&nbsp;Tlabel = "IT"if (labelName == label):text = getContent(url)# 如果新闻内容长度大于1000,保存新闻标题和正文if (len(text) > 1000):fileNum = fileNum + 1f = saveFile(labelName, date, fileNum)f.write(title)f.write(text)f.close()# 抓取新闻标题、类别、发布时间、url,并建立相应的文件,存到相应的类别文件夹中
def getNews(url, begin_page, end_page, labelName):for i in range(begin_page, end_page + 1):nurl = url + str(i) + ".html"# print nurl# 获取网页内容getURL(nurl, labelName)# 接收输入类别、起始页数、终止页数
def main():url = 'http://www.chinanews.com/scroll-news/news'ch = int(raw_input(u'请输入类别的对应的数字(IT=1、财经=2、地方=3、国际=4、国内=5、健康=6、军事=7、'u'社会=8、体育=9、文化=10),输入-1退出,输入0表示全选:\n'))labels = ('IT', '财经', '地方', "国际", "国内", "健康", "军事", "社会", "体育", "文化")while (ch != -1):begin_page = int(raw_input(u'请输入开始的页数(1,):\n'))end_page = int(raw_input(u'请输入终点的页数(1,):\n'))if (ch >= 1 and ch <= 10):getNews(url, begin_page, end_page, labels[ch - 1])elif (ch == 0):for label in labels:getNews(url, begin_page, end_page, label)else:print "输入错误,请重新输入!"ch = int(raw_input(u'请输入类别的对应的数字(IT=1、财经=2、地方=3、国际=4、国内=5、健康=6、军事=7、'u'社会=8、体育=9、文化=10),输入-1退出,输入0表示全选:\n'))# 调用主函数
# 一页有125条新闻
main()

爬取的新闻内容(标题+长度大于1000的正文)如下:

(6)Python爬虫——爬取中新网新闻相关推荐

  1. python --爬虫爬取学校官网新闻并下载到本地

    IDE:jupyter Notebook python version:python 3.6 目标数据:学校官网新闻(一页) 网址:* 使用到的库:requests urllib re Beautif ...

  2. Python 数据采集-爬取学校官网新闻标题与链接(基础)

    Python 爬虫爬取学校官网新闻标题与链接 一.前言 二.扩展库简要介绍 01 urllib 库 (1)urllib.request.urlopen() 02 BeautifulSoup 库 (1) ...

  3. Python 数据采集-爬取学校官网新闻标题与链接(进阶)

    Python 爬虫爬取学校官网新闻标题与链接(进阶) 前言 一.拼接路径 二.存储 三.读取翻页数据 四.完整代码展示 五.小结 前言 ⭐ 本文基于学校的课程内容进行总结,所爬取的数据均为学习使用,请 ...

  4. python爬虫图片实例-Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  5. Python爬虫爬取煎蛋网图片代码实例

    这篇文章主要介绍了Python爬虫爬取煎蛋网图片代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天,试着爬取了煎蛋网的图片. 用到的包: ...

  6. python爬虫爬取彼岸图网图片

    python爬虫爬取彼岸图网图片 话不多说,直接上代码! import requests from PIL import Image from io import BytesIO import re ...

  7. 每日一练:Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现

    Python 爬虫篇 - 爬取全国新冠肺炎疫情数据实例详解 效果图展示 第一章:疫情信息的下载与数据提取 ① 爬取页面数据到本地 ② json 字符串正则表达式分析 ③ 提取数据中的 json 字符串 ...

  8. python 爬虫爬取煎蛋网妹子图,我1T的硬盘装满了!

    前言 大家好,这里是「brucepk」爬虫 系列教程.此系列教程以实例项目为材料进行分析,从项目中学习 python 爬虫,跟着我一起学习,每天进步一点点. 煎蛋网站 image 很多朋友都反应学 p ...

  9. Python爬虫爬取ok资源网电影播放地址

    #爬取ok资源网电影播放地址#www.okzy.co #入口一:http://okzy.co/index.php?m=vod-search&wd={关键字}&submit=search ...

最新文章

  1. TCP三次握手和四次挥手的解释
  2. 数据库 sqlite order by对结果集进行排序
  3. golang RSA (PKCS#1)加密解密
  4. bigdecimal不等于0怎么写_创业计划书不知道怎么写?掌握核心逻辑是关键
  5. php和python区别-PHP与Python语言有哪些区别之处?选择哪一个好?
  6. BarTender安装常见问题集结
  7. 如何组合救援磁盘以创建最终Windows修复磁盘
  8. 50T内存?百万机时?头一次见这么耗费内存和机时的分析?
  9. php会员可见内容代码,DedeCMS内容隐藏指定字段仅对会员显示对游客不可见的实现方法...
  10. Elasticsearch实践(二)linux安装
  11. oracle java耗cpu_ORACLE高手请看过来,CPU使用率100% (100分)
  12. Oracle hint手动优化
  13. Hub与Switch的帧的广播细节
  14. 使用jsencrypt实现参数的前端加密
  15. Webstorm2018破解
  16. SpaceSyntax【空间句法】之DepthMapX学习:唠叨(目录)
  17. Python项目:外星人入侵(汇总)
  18. git命令判断当前分支是否与master合并
  19. 数据库—行式存储和列式存储
  20. Asus EeePC X101上网本为MeeGo带来新的生机

热门文章

  1. sip信号服务器,华为IAD104H语音网关,SIP信号转换成模拟电话线使用
  2. 中山大学2021网络科学导论期中试卷
  3. Java Web 03 — JDBC_02(数据库连接池_C3P0_Druid、JdbcTemplate)
  4. eclipse中导入项目后项目名称出现红叉叉,但项目能跑
  5. AI在K8S中的实践:云智天枢AI中台架构揭秘
  6. 关于Web的学习(18.5.18)——css篇
  7. 对人再善良也要有底线,千万别犯这3种说话大忌,好心当成驴肝肺
  8. VC++ ADO调用存储过程方法
  9. 自动获取ip地址但是ping不通服务器,PC从DHCP获取IP,却ping不通DHCP服务器
  10. 线性代数学习笔记6-3:行列式的计算、代数余子式