关闭

python爬虫案例——python爬取百度新闻RSS数据

标签: python百度新闻rss爬虫
1708人阅读 评论(0) 收藏 举报
分类:

全栈工程师开发手册 (作者:栾鹏)

python教程全解

各RSS网站参考http://blog.csdn.net/luanpeng825485697/article/details/78737510

今天我们使用python3.6来爬去百度新闻RSS中的数据,有了数据集,这样可以对样本数据集进行分类、聚类、推荐算法的学习

调试环境python3.6

# 获取百度新闻数据集
import urllib
import re
from bs4 import BeautifulSoup
import json
import io

feedlist=[
    'http://news.baidu.com/n?cmd=1&class=civilnews&tn=rss&sub=0',  #国内焦点
    'http://news.baidu.com/n?cmd=1&class=shizheng&tn=rss&sub=0',   #时政焦点
    'http://news.baidu.com/n?cmd=1&class=gangaotai&tn=rss&sub=0',   #港澳台焦点
    'http://news.baidu.com/n?cmd=1&class=internews&tn=rss&sub=0',  #国际焦点
    'http://news.baidu.com/n?cmd=1&class=mil&tn=rss&sub=0',  #军事焦点
    'http://news.baidu.com/n?cmd=1&class=hqsy&tn=rss&sub=0',  #环球视野焦点
    'http://news.baidu.com/n?cmd=1&class=finannews&tn=rss&sub=0',  #财经焦点
    'http://news.baidu.com/n?cmd=1&class=stock&tn=rss&sub=0',  #股票焦点
    'http://news.baidu.com/n?cmd=1&class=money&tn=rss&sub=0',  #理财焦点
    'http://news.baidu.com/n?cmd=1&class=financialnews&tn=rss&sub=0',  #金融观察焦点
    'http://news.baidu.com/n?cmd=1&class=internet&tn=rss&sub=0',  #互联网焦点
    'http://news.baidu.com/n?cmd=1&class=rwdt&tn=rss&sub=0',  #人物动态焦点
    'http://news.baidu.com/n?cmd=1&class=gsdt&tn=rss&sub=0',  #公司动态焦点
    'http://news.baidu.com/n?cmd=1&class=housenews&tn=rss&sub=0',  #房产焦点
    'http://news.baidu.com/n?cmd=1&class=gddt&tn=rss&sub=0',  #各地动态焦点
    'http://news.baidu.com/n?cmd=1&class=zcfx&tn=rss&sub=0',  #政策风向焦点
    'http://news.baidu.com/n?cmd=1&class=fitment&tn=rss&sub=0',  #家居焦点
    'http://news.baidu.com/n?cmd=1&class=autonews&tn=rss&sub=0',  #汽车焦点
    'http://news.baidu.com/n?cmd=1&class=autobuy&tn=rss&sub=0',  #新车导购焦点
    'http://news.baidu.com/n?cmd=1&class=autoreview&tn=rss&sub=0',  #试驾焦点
    'http://news.baidu.com/n?cmd=1&class=sportnews&tn=rss&sub=0',  #体育焦点
    'http://news.baidu.com/n?cmd=1&class=nba&tn=rss&sub=0',  #NBA焦点
    'http://news.baidu.com/n?cmd=1&class=worldsoccer&tn=rss&sub=0',  #国际足球焦点
    'http://news.baidu.com/n?cmd=1&class=chinasoccer&tn=rss&sub=0',   #国内足球焦点
    'http://news.baidu.com/n?cmd=1&class=cba&tn=rss&sub=0',  #国内篮球焦点
    'http://news.baidu.com/n?cmd=1&class=othersports&tn=rss&sub=0',  #综合体育焦点
    'http://news.baidu.com/n?cmd=1&class=olympic&tn=rss&sub=0',  #奥运焦点
    'http://news.baidu.com/n?cmd=1&class=enternews&tn=rss&sub=0',  #娱乐焦点
    'http://news.baidu.com/n?cmd=1&class=star&tn=rss&sub=0',  #明星焦点
    'http://news.baidu.com/n?cmd=1&class=film&tn=rss&sub=0',  #电影焦点
    'http://news.baidu.com/n?cmd=1&class=tv&tn=rss&sub=0',  #电视焦点
    'http://news.baidu.com/n?cmd=1&class=music&tn=rss&sub=0',  #音乐焦点
    'http://news.baidu.com/n?cmd=1&class=gamenews&tn=rss&sub=0',  #游戏焦点
    'http://news.baidu.com/n?cmd=1&class=netgames&tn=rss&sub=0',  #网络游戏焦点
    'http://news.baidu.com/n?cmd=1&class=tvgames&tn=rss&sub=0',  #电视游戏焦点
    'http://news.baidu.com/n?cmd=1&class=edunews&tn=rss&sub=0',  #教育焦点
    'http://news.baidu.com/n?cmd=1&class=exams&tn=rss&sub=0',  #考试焦点
    'http://news.baidu.com/n?cmd=1&class=abroad&tn=rss&sub=0',  #留学焦点
    'http://news.baidu.com/n?cmd=1&class=healthnews&tn=rss&sub=0',  #健康焦点
    'http://news.baidu.com/n?cmd=1&class=baojian&tn=rss&sub=0',  #保健养生焦点
    'http://news.baidu.com/n?cmd=1&class=yiyao&tn=rss&sub=0',  #寻医问药焦点
    'http://news.baidu.com/n?cmd=1&class=technnews&tn=rss&sub=0',  #科技焦点
    'http://news.baidu.com/n?cmd=1&class=mobile&tn=rss&sub=0',  #手机焦点
    'http://news.baidu.com/n?cmd=1&class=digi&tn=rss&sub=0',  #数码焦点
    'http://news.baidu.com/n?cmd=1&class=computer&tn=rss&sub=0',  #电脑焦点
    'http://news.baidu.com/n?cmd=1&class=discovery&tn=rss&sub=0',  #科普焦点
    'http://news.baidu.com/n?cmd=1&class=socianews&tn=rss&sub=0',  #社会焦点
    'http://news.baidu.com/n?cmd=1&class=shyf&tn=rss&sub=0',  #社会与法焦点
    'http://news.baidu.com/n?cmd=1&class=shwx&tn=rss&sub=0',  #社会万象焦点
    'http://news.baidu.com/n?cmd=1&class=zqsk&tn=rss&sub=0',  #真情时刻焦点
]

def getrss1(feedlist):
    for url in feedlist:
        info={}
        info[url]={
            'title':'',
            'allitem':[]
        }
        try:
            response=urllib.request.urlopen(url)
            text = str(response.read(), encoding='utf-8')
            soup = BeautifulSoup(text, 'lxml')
            title = soup.title
            info[url]['title']=title
            for item in soup('item'):
                try:
                    print(item)
                    suburl={
                        'title':item('title').replace(']]>','').replace('<![CDATA[',''),
                        'link': item('link').replace(']]>', '').replace('<![CDATA[', ''),
                        'source': item('source').replace(']]>', '').replace('<![CDATA[', ''),
                        'text': item('description').get_text().replace(']]>',''),
                        'type':title
                    }
                    print(suburl)
                    info[url]['allitem'].append(suburl)
                except:
                    print('无法匹配'+item)
        except:
            print("error: %s" % url)


def getrss(feedlist):
    rss = {}

    for url in feedlist:
        rss[url] = {
            'title': '',
            'allitem': []
        }
        try:
            response = urllib.request.urlopen(url)
            text = str(response.read(), encoding='utf-8')
            soup = BeautifulSoup(text, 'lxml')
            title = soup.title.get_text()
            rss[url]['title'] = title
            patterstr = r'<item>.*?' \
                     r'<title>(.*?)</title>.*?' \
                     r'<link>(.*?)</link>.*?' \
                     r'<source>(.*?)</source>.*?' \
                     r'<description>.*?<br>(.*?)<br.*?' \
                     r'</item>'
            pattern = re.compile(patterstr,re.S)   #使用多行模式
            results = re.findall(pattern, text)   #如何查询多次

            if results!=None or len(results)==0:
                for result in results:
                    suburl = {
                        'title': result[0].replace(']]>', '').replace('<![CDATA[', ''),
                        'link': result[1].replace(']]>', '').replace('<![CDATA[', ''),
                        'source': result[2].replace(']]>', '').replace('<![CDATA[', ''),
                        'text': result[3].replace(']]>', ''),
                        'type': title
                    }
                    print(suburl)
                    rss[url]['allitem'].append(suburl)
        except:
            print("error: %s" % url)

    return rss


# 形成一个文本描述和分类的数据集。
if __name__ == '__main__':
    rss = getrss(feedlist)
    jsonstr = json.dumps(rss,ensure_ascii=False)
    f = io.open('rss.json', 'w', encoding='utf-8')
    f.writelines(jsonstr)
    f.close()








1
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

python爬虫(抓取百度新闻列表)

一、python请求要抓取的url页面 要抓取的url http://news.baidu.com/ ,先python模拟请求该url#!/usr/bin/python # -*- coding:u...
  • lenovo403
  • lenovo403
  • 2016-02-23 09:54
  • 2479

WebCollector爬取百度搜索引擎例子

使用WebCollector来爬取百度搜索引擎按照关键字搜索的结果页面,解析规则可能会随百度搜索的改版而失效。 代码如下: package com.wjd.baidukey.crawler; imp...
  • zhihaoma
  • zhihaoma
  • 2016-01-05 13:12
  • 3358

【Python】爬虫爬取各大网站新闻(一)

作者博客地址:http://andyheart.mePython爬虫一步一步爬取文章背景最近在学习机器学习算法,分为回归,分类,聚类等,在学习过程中苦于没有数据做练习,就想爬取一下国内各大网站的新闻,...
  • jie310300215
  • jie310300215
  • 2016-03-27 10:06
  • 20753

Python爬虫完整案例 - 爬取百度百科词条信息

概述 一个完整的爬虫,一般由以下5个组件构成: 1.URL管理器 负责维护待爬取URL队列和已爬取URL队列,必须拥有去重功能。 2.HTML下载器 负责根据调度器从URL管理器中取出的ur...
  • topleeyap
  • topleeyap
  • 2018-01-08 17:16
  • 40

Python爬虫学习(一)——爬取新浪新闻

import requests from bs4 import BeautifulSoup from datetime import datetime import re import json im...
  • picway
  • picway
  • 2017-10-26 20:55
  • 410

python爬虫实战(2)——爬取腾讯新闻

一.HTTP请求无论我们通过浏览器打开网站、访问网页,还是通过脚本对URL网址进行访问,本质上都是对HTTP服务器的请求,浏览器上所呈现的、控制台所显示的都是HTTP服务器对我们请求的响应。 以打开...
  • xu1129005165
  • xu1129005165
  • 2017-11-02 14:47
  • 235

(6)Python爬虫——爬取中新网新闻

工欲善其事,必先利其器。我们要进行数据挖掘,就必须先获取数据,获取数据的方法有很多种,其中一种就是爬虫。下面我们利用Python2.7,写一个爬虫,专门爬取中新网http://www.chinanew...
  • Fighting_No1
  • Fighting_No1
  • 2016-03-18 19:13
  • 2657

基于python Scrapy的爬虫——爬取某网站新闻内容

【完整源码】https://github.com/beng0305/ThirtySixSpider 【环境】python 2.7 scrapy 1.4 PhantomJS Pyodbc sqlserv...
  • humanbeng
  • humanbeng
  • 2017-07-27 15:09
  • 612

Python爬取百度新闻数据并将时间统计到EXCEL中

缘起我的好朋友的毕业论文需要爬取基金经理的新闻数量,并且统计新闻数量与基金的成交率的关系,我当然义不容辞啦。 任务描述:爬取三百位基金经理“百度新闻”中的搜索结果,并且将其分别按月和按季度统计新闻数...
  • mr_phy
  • mr_phy
  • 2017-02-26 20:30
  • 744

Python爬虫爬取百度百科词条源码

  • 2016-10-28 21:39
  • 20KB
  • 下载
    友情链接
    个人资料
    • 访问:728470次
    • 积分:12882
    • 等级:
    • 排名:第1232名
    • 原创:466篇
    • 转载:27篇
    • 译文:0篇
    • 评论:54条
    博客专栏
    最新评论