新浪新闻详情页的数据抓取实例
上一篇文章《Python爬虫:抓取新浪新闻数据》详细解说了如何抓取新浪新闻详情页的相关数据,但代码的构建不利于后续扩展,每次抓取新的详情页时都需要重新写一遍,因此,我们需要将其整理成函数,方便直接调用。
详情页抓取的6个数据:新闻标题、评论数、时间、来源、正文、责任编辑。
首先,我们先将评论数整理成函数形式表示:
1 import requests 2 import json 3 import re 4 5 comments_url = '{}&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 = ''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 = '{}&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].text25 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].text29 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 result32 33 print(getNewsDetail(''))
在函数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': '张迪 '}
以上是新浪新闻详情页的数据抓取实例的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

在 Sublime Text 中运行 Python 代码,需先安装 Python 插件,再创建 .py 文件并编写代码,最后按 Ctrl B 运行代码,输出会在控制台中显示。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

Golang在性能和可扩展性方面优于Python。1)Golang的编译型特性和高效并发模型使其在高并发场景下表现出色。2)Python作为解释型语言,执行速度较慢,但通过工具如Cython可优化性能。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

在 Notepad 中运行 Python 代码需要安装 Python 可执行文件和 NppExec 插件。安装 Python 并为其添加 PATH 后,在 NppExec 插件中配置命令为“python”、参数为“{CURRENT_DIRECTORY}{FILE_NAME}”,即可在 Notepad 中通过快捷键“F6”运行 Python 代码。
