上一篇文章《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   -----

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

转载于:https://www.cnblogs.com/duwangdan/p/6932730.html

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

  1. Python3网络爬虫:网易新闻App的广告数据抓取

    咱们就不说废话了,直接上完整的源码 def startGetData(self):self.url = "https://nex.163.com/q" body = self.ge ...

  2. python爬虫新浪新闻_python爬虫之获取新浪新闻信息

    一:前言 windows平台: 1):谷歌的chrome浏览器:python3.6的软件安装包,需要导入的库有: [python]  view plain copy pip install reque ...

  3. Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy

    1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数 ...

  4. Python爬虫入门教程石家庄链家租房数据抓取

    1. 写在前面 这篇博客爬取了链家网的租房信息,爬取到的数据在后面的博客中可以作为一些数据分析的素材. 我们需要爬取的网址为:https://sjz.lianjia.com/zufang/ 2. 分析 ...

  5. 【python爬虫】网贷天眼平台表格数据抓取

    一.需求分析 抓取url: http://www.p2peye.com/shuju/ptsj/ 抓取字段: 昨日数据 排序 平台名称 成交额 综合利率 投资人 借款周期 借款人 满标速度 累计贷款余额 ...

  6. Python爬虫入门教程 22-100 CSDN学院课程数据抓取

    1. CSDN学院课程数据-写在前面 今天又要抓取一个网站了,选择恐惧症使得我不知道该拿谁下手,找来找去,算了,还是抓取CSDN学院吧,CSDN学院的网站为 https://edu.csdn.net/ ...

  7. python爬虫新浪新闻_学习了《python网络爬虫实战》第一个爬虫,爬取新浪新闻

    请安装anaconda,其中附带的spyder方便运行完查看变量 1.进入cmd控制台, 输入 pip install BeautifulSoup4 pip install requests 2.编写 ...

  8. python爬虫成长之路(一):抓取证券之星的股票数据

    python爬虫成长之路(一):抓取证券之星的股票数据 获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇 ...

  9. Python爬虫之XPath基础教程:用代码抓取网页数据

    Python爬虫之XPath基础教程:用代码抓取网页数据 在网络时代,网页数据是获取信息和进行分析的最重要的来源之一.Python的爬虫技术让我们可以轻松抓取网页数据,并进行数据处理.XPath是一种 ...

  10. 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)

    上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...

最新文章

  1. Oracle 查看表空间的大小及使用情况sql语句
  2. cad显示有点暗_CAD参照的图框颜色太暗怎么调整?
  3. js比较运算符==与===的区别
  4. 腾讯技术直播间 | 轻量产品思维!手把手教你搭建在线甲醛监测系统
  5. android高德地图绘制多边形_exlive1.0BS网上查车完善电子围栏:行政区域、多边形、规划线路...
  6. FPGA 资料搜集记录
  7. [Java基础]字符流读写数据的方式
  8. 设计模式---工厂模式
  9. 【LeetCode】【HOT】141. 环形链表(快慢指针)
  10. jquery根据身份证号码计算出生日期、年龄、性别代码
  11. 2021安新中学高考成绩查询,石家庄二中雄安校区•河北安新中学2019届冲刺高考百日誓师大会...
  12. 前端机器人流程设计的最佳实践:输入输出文件结构和逻辑框架
  13. python算术平方根_Python 平方根
  14. 联盟链系统开发 联盟链开发多钱
  15. STM32深入实践教程目录
  16. yogabook安卓版root方法
  17. Apache Commons Lang3 DateUtils用法
  18. 从零开始构建矽璓工业物联操作系统:使用risc-v架构的hifive1 emulator
  19. 2021年中国境内上市公司数量及融资情况:首发上市公司及募资总额均创近10年新高[图]
  20. CRM介绍、呼叫中心系统

热门文章

  1. 长春公办计算机学校有哪些条件,长春小学初中哪些学校民办?哪些公办?最新一览表来也!...
  2. 计算机加内存还是固态硬盘,电脑运行速度慢加内存条还是固态硬盘
  3. 为什么很多企业都是采用IT人力外包服务?
  4. 中国步进电机市场现状研究分析与发展前景预测报告(2022)
  5. 【crossbeam系列】3 crossbeam-deque:work-stealing算法
  6. 关于 试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B) 的 解决方法
  7. iis aspnet_iisreg.exe 0x8007000B
  8. mac上的微信小助手WeChatPlugin
  9. Android 神器Tasker使用
  10. 第7期 DApp 榜单:长夜将至,我们将至死守望