Python爬虫:新浪新闻详情页的数据抓取(函数版)

上一篇文章《Python爬虫:抓取新浪新闻数据》详细解说了如何抓取新浪新闻详情页的相关数据,但代码的构建不利于后续扩展,每次抓取新的详情页时都需要重新写一遍,因此,我们需要将其整理成函数,方便直接调用。

详情页抓取的6个数据:新闻标题、评论数、时间、来源、正文、责任编辑。

首先,我们先将评论数整理成函数形式表示:

 1 import requests
 2 import json
 3 import re
 4
 5 comments_url = ‘http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-{}&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20‘
 6
 7 def getCommentsCount(newsURL):
 8     ID = re.search(‘doc-i(.+).shtml‘, newsURL)
 9     newsID = ID.group(1)
10     commentsURL = requests.get(comments_url.format(newsID))
11     commentsTotal = json.loads(commentsURL.text.strip(‘var data=‘))
12     return commentsTotal[‘result‘][‘count‘][‘total‘]
13
14 news = ‘http://news.sina.com.cn/c/nd/2017-05-14/doc-ifyfeius7904403.shtml‘
15 print(getCommentsCount(news))

第5行comments_url,在上一篇中,我们知道评论链接中有新闻ID,不同新闻的评论数通过该新闻ID的变换而变换,因此我们将其格式化,新闻ID处用大括号{}来替代;

定义获取评论数的函数getCommentsCount,通过正则来查找匹配的新闻ID,然后将获取的新闻链接存储进变量commentsURL中,通过解码JS来得到最终的评论数commentsTotal;

然后,我们只需输入新的新闻链接,便可直接调用函数getCommentsCount来获取评论数。

最后,我们将需要抓取的6个数据均整理到一个函数getNewsDetail中。如下:

 1 from bs4 import BeautifulSoup
 2 import requests
 3 from datetime import datetime
 4 import json
 5 import re
 6
 7 comments_url = ‘http://comment5.news.sina.com.cn/page/info?version=1&format=js&channel=gn&newsid=comos-{}&group=&compress=0&ie=utf-8&oe=utf-8&page=1&page_size=20‘
 8
 9 def getCommentsCount(newsURL):
10     ID = re.search(‘doc-i(.+).shtml‘, newsURL)
11     newsID = ID.group(1)
12     commentsURL = requests.get(comments_url.format(newsID))
13     commentsTotal = json.loads(commentsURL.text.strip(‘var data=‘))
14     return commentsTotal[‘result‘][‘count‘][‘total‘]
15
16 # news = ‘http://news.sina.com.cn/c/nd/2017-05-14/doc-ifyfeius7904403.shtml‘
17 # print(getCommentsCount(news))
18
19 def getNewsDetail(news_url):
20     result = {}
21     web_data = requests.get(news_url)
22     web_data.encoding = ‘utf-8‘
23     soup = BeautifulSoup(web_data.text,‘lxml‘)
24     result[‘title‘] = soup.select(‘#artibodyTitle‘)[0].text
25     result[‘comments‘] = getCommentsCount(news_url)
26     time = soup.select(‘.time-source‘)[0].contents[0].strip()
27     result[‘dt‘] = datetime.strptime(time,‘%Y年%m月%d日%H:%M‘)
28     result[‘source‘] = soup.select(‘.time-source span span a‘)[0].text
29     result[‘article‘] = ‘ ‘.join([p.text.strip() for p in soup.select(‘#artibody p‘)[:-1]])
30     result[‘editor‘] = soup.select(‘.article-editor‘)[0].text.lstrip(‘责任编辑:‘)
31     return result
32
33 print(getNewsDetail(‘http://news.sina.com.cn/c/nd/2017-05-14/doc-ifyfeius7904403.shtml‘))

在函数getNewsDetail中,获取需要抓取的6个数据,放在result中:

  • result[‘title‘]是获取新闻标题;
  • resul[‘comments‘]是获取评论数,可以直接调用我们开头定义的评论数函数getCommentsCount;
  • result[‘dt‘]是获取时间; result[‘source‘]是获取来源;
  • result[‘article‘]是获取正文;
  • result[‘editor‘]是获取责任编辑。

而后输入自己想要获取数据的新闻链接,调用该函数即可。

部分运行结果:

{‘title‘: ‘浙大附中开课教咏春 “教头”系叶问第三代弟子‘, ‘comments‘: 618, ‘dt‘: datetime.datetime(2017, 5, 14, 7, 22), ‘source‘: ‘中国新闻网‘, ‘article‘: ‘原标题:浙大附中开课教咏春 “教头”系叶问......来源:钱江晚报‘, ‘editor‘: ‘张迪 ‘}

Mac,Python版本:3.6,PyCharm版本:2016.2

-----   End   -----

作者:杜王丹,微信公众号:杜王丹,互联网产品经理。

时间: 2024-10-27 04:01:38

Python爬虫:新浪新闻详情页的数据抓取(函数版)的相关文章

新浪热门微博、热门话题抓取

A.为什么要做这个功能? 最近微博和微信开放平台的二次开发整的貌似蛮火,但做过微博开放平台的二次开发的人都会知道,新浪提供的微博访问接口并不是那么完美,有众多限制(调用频率限制.接口级别限制),对于没有经过审核通过高级接口的用户而言,要想通过API来实现这个功能,我只能说一句呵呵. B.实现方式与步骤? 1.WinForm 步骤1:调用内置控件WebBrowser对象来加载热门微博地址. 步骤2:  在后台用正则表达式解析要抓取HTML的片段,复杂的抓取往往需要程序员的正则表达式的掌握程度比较好

Python爬虫入门教程 3-100 美空网数据爬取

简介 从今天开始,我们尝试用2篇博客的内容量,搞定一个网站叫做"美空网"网址为:http://www.moko.cc/, 这个网站我分析了一下,我们要爬取的图片在 下面这个网址 http://www.moko.cc/post/1302075.html 然后在去分析一下,我需要找到一个图片列表页面是最好的,作为一个勤劳的爬虫coder,我找到了这个页面 http://www.moko.cc/post/da39db43246047c79dcaef44c201492d/list.html 列

Python爬虫技术干货,教你如何实现抓取京东店铺信息及下载图片

什么是Python爬虫开发 Python爬虫开发,从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止.世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析.挖掘.机器学习等提供重要的数据源. Python爬虫实例参考 这是一个用Python爬虫实现抓取京东店铺信息以及下载图片的例子,仅供参考. 信息抓取: 图片下载的:注意: 1.在选择信息的时候用CS

python爬虫案例-乌托家家具公司数据爬取

这个案例主要是在乌托家网站上爬取家具公司的数据,用的方法是requests模块和xpath语法.代码如下: 1 # Author:K 2 import requests 3 from lxml import etree 4 import os 5 6 HEADERS = { 7 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.372

Python爬虫工程师必学——App数据抓取实战

Python爬虫工程师必学 App数据抓取实战 爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.主要讲解如何用python实现App数据抓取 数据去重又称重复数据删除,是指在一个数字文件集合中,找出重复的数据并将其删除,只保存唯一的数据单元.数据去重可以有效避免资源的浪费,所以数据去重至关重要 数据去重 数据去重可以从两个节点入手:一个是URL去重.即直接筛选掉重复的URL:另一个是数据库去重.即利用数据库的一些特性筛选重复的数据. def process_spider_

python爬虫:使用urllib.request和BeautifulSoup抓取新浪新闻标题、链接和主要内容

案例一 抓取对象: 新浪国内新闻(http://news.sina.com.cn/china/),该列表中的标题名称.时间.链接. 完整代码: from bs4 import BeautifulSoup import requests url = 'http://news.sina.com.cn/china/' web_data = requests.get(url) web_data.encoding = 'utf-8' soup = BeautifulSoup(web_data.text,'

python爬虫:抓取新浪新闻内容(从当前时间到之前某个时间段),并用jieba分词,用于训练自己的分词模型

新浪新闻内容采用的是ajax动态显示内容,通过抓包,发现如下规律: 每次请求下一页,js那一栏都会出现新的url: "http://api.roll.news.sina.com.cn/zt_list?channel=news&cat_1=gnxw&cat_2==gdxw1" "||=gatxw||=zs-pl||=mtjj&level==1||=2&show_ext=1&show_all=1&show_num=22&ta

Python_网络爬虫(新浪新闻抓取)

爬取前的准备: BeautifulSoup的导入:pip install BeautifulSoup4 requests的导入:pip install requests 下载jupyter notebook:pip install jupyter notebook 下载python,配置环境(可使用anocanda,里面提供了很多python模块) json 定义 :是一种格式,用于数据交换. Javascript 对象 定义 : 一种javascript的引用类型 中文格式除了' utf-8

门户级UGC系统的技术进化路线——新浪新闻评论系统的架构演进和经验总结(转)

add by zhj:先收藏了 摘要:评论系统是所有门户网站的核心标准服务组件之一.本文作者曾负责新浪网评论系统多年,这套系统不仅服务于门户新闻业务,还包括调查.投票等产品,经历了从单机到多机再到集群,从简单到复杂再回归简单的过程. 评论系统,或者称为跟帖.留言板,是所有门户网站的核心标准服务组件之一.与论坛.博客等其他互联网UGC系统相比,评论系统虽然从产品功能角度衡量相对简单,但因为需要能够在突发热点新闻事件时,在没有任何预警和准备的前提下支撑住短短几分钟内上百倍甚至更高的访问量暴涨,而评论