前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何使用PYTHON抓取新闻文章

如何使用PYTHON抓取新闻文章

作者头像
用户7466307
发布于 2020-09-14 07:10:56
发布于 2020-09-14 07:10:56
2.6K00
代码可运行
举报
运行总次数:0
代码可运行

在本文中,我们将讨论如何使用Python抓取新闻报道。这可以使用方便的报纸包装来完成。

Python newspaper 包简介

可以使用pip安装newspaper 包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install newspaper

安装完成后,即可开始。 newspaper可以通过从给定的URL上抓取一篇文章,或者通过找到网页上其他新闻的链接来工作。让我们从处理一篇文章开始。首先,我们需要导入Article类。接下来,我们使用此类将内容从URL下载到我们的新闻文章。然后,我们使用parse方法解析HTML。最后,我们可以使用.text打印文章的文本。

爬一篇文章

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from newspaper import Article
 
url = "https://www.bloomberg.com/news/articles/2020-08-01/apple-buys-startup-to-turn-iphones-into-payment-terminals?srnd=premium"
 
# download and parse article
article = Article(url)
article.download()
article.parse()
 
# print article text
print(article.text)

还可以获取有关文章的其他信息,例如指向帖子中嵌入的图像或视频的链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# get list of image links
article.images
 
# get list of videos - empty in this case
article.movies

下载网页上链接的所有文章

现在,让我们看看如何将所有新闻文章链接到网页上。我们将使用如下的news.build方法来实现。然后,我们可以使用article_urls方法提取文章URL 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import newspaper
 
site = newspaper.build("https://news.ycombinator.com/")  
 
# get list of article URLs
site.article_urls()

使用上面的对象,我们还可以获得每个文章的内容。这里,所有article对象都存储在list.site.articles中。例如,让我们获取第一篇文章的内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
site_article = site.articles[0]
 
site_article.download()
site_article.parse()
 
print(site_article.text)

现在,让我们修改代码以获得前十名文章:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
top_articles = []
for index in range(10):
    article = site.articles[index]
    article.download()
    article.parse()
    top_articles.append(article)

警告!

使用时,一个重要的说明newspaper的是,如果你运行newspaper.build用相同的URL多次, 包将缓存,然后删除已经刮了文章。例如,在下面的代码中,我们连续两次运行Newspaper.build并获得不同的结果。第二次运行它时,代码仅返回新添加的链接。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
site = newspaper.build("https://news.ycombinator.com/")    
 
print(len(site.articles))
 
site = newspaper.build("https://news.ycombinator.com/")    
 
print(len(site.articles))

可以通过在函数调用中添加一个额外的参数来进行调整,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
site = newspaper.build("https://news.ycombinator.com/", memoize_articles=False)

如何获得文章摘要

该newspaper包也支持一些NLP功能。您可以通过调用nlp方法进行检查。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
article = top_articles[3]
 
article.nlp()

现在,让我们使用summary方法。这将尝试返回文章摘要。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
article.summary()

您还可以从文章中获取关键字列表。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
article.keywords

如何获得最热门的Google关键字

报纸还有其他一些很酷的功能。例如,我们可以使用hot方法轻松使用它在Google上吸引最热门的搜索。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
newspaper.hot()

该软件包还可以返回受欢迎的URL列表,如下所示。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
newspaper.popular_urls()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试test 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
496. Next Greater Element I(Stack-Easy)
该文是关于给定两个数组nums1和nums2,找到所有nums1中的元素对应nums2位置的下一个更大的元素。如果nums1中没有元素,则找不到对应位置的下一个更大元素,返回-1。对于每个元素,需要记录其对应的最大值在nums2中的位置。如果nums2中没有这个元素,则返回-1。否则,直接返回其对应的最大值在nums2中的位置。
Jack_Cui
2018/01/08
4450
56. 合并区间(思维)
题目链接:https://leetcode-cn.com/problems/merge-intervals/
Ch_Zaqdt
2020/02/17
3160
程序员面试金典 - 面试题 03.05. 栈排序(两栈)
栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。 最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。 该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。
Michael阿明
2020/07/13
3820
LeetCode周赛283,第一名送iWatch,少年你参赛了吗?
老规矩我们来复盘一下第283场的leetcode周赛,赞助商是安贤量化。这次比赛的奖品非常丰富,看得出来是壕气公司。
TechFlow-承志
2022/09/21
6060
LeetCode周赛283,第一名送iWatch,少年你参赛了吗?
LeetCode的第230场周赛题解
【GiantPandaCV导语】这是LeetCode的第230场周赛的题解,本期考察的知识点有暴力,搜索,贪心,单调栈等等。
BBuf
2021/03/09
3000
LeetCode 907. 子数组的最小值之和(单调栈)
给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。
Michael阿明
2021/02/19
7940
LeetCode 1793. 好子数组的最大分数(单调栈)
一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i+1], ..., nums[j]) * (j - i + 1) 。一个 好 子数组的两个端点下标需要满足 i <= k <= j 。
Michael阿明
2021/09/06
4170
LeetCode 456. 132模式(逆序遍历+单调栈)
给定一个整数序列:a1, a2, …, an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj。 设计一个算法,当给定有 n 个数字的序列时,验证这个序列中是否含有132模式的子序列。
Michael阿明
2020/07/13
7470
LeetCode 716. 最大栈(双栈 / list+map)
设计一个最大栈,支持 push、pop、top、peekMax 和 popMax 操作。
Michael阿明
2020/07/13
1.2K0
LeetCode 1063. 有效子数组的数目(单调栈)
文章目录 1. 题目 2. 解题 1. 题目 给定一个整数数组 A,返回满足下面条件的 非空、连续 子数组的数目: 子数组中,最左侧的元素不大于其他元素。 示例 1: 输入:[1,4,2,5,3] 输出:11 解释:有 11 个有效子数组,分别是:[1],[4],[2],[5],[3],[1,4],[2,5],[1,4,2],[2,5,3],[1,4,2,5],[1,4,2,5,3] 。 示例 2: 输入:[3,2,1] 输出:3 解释:有 3 个有效子数组,分别是:[3],[2],[1] 。 示例
Michael阿明
2021/02/19
7480
【算法/训练】:单调队列&&单调栈
当01100符合时,窗口外面的肯定也符合要求 注意:循环截止条件为 right < n - 1.
IsLand1314
2024/10/15
1420
【算法/训练】:单调队列&&单调栈
LeetCode 155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
Michael阿明
2022/11/26
2160
LeetCode 155. 最小栈
LeetCode 739. 每日温度(单调栈)
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。
Michael阿明
2020/07/13
3110
LeetCode 739. 每日温度(单调栈)
单调栈总结_进栈和出栈的算法思想
单调栈是一种特殊的栈,特殊之处在于栈内的元素都保持一个单调性。 假设下图是一个栈内元素的排列情况(单调递增的栈):
全栈程序员站长
2022/11/09
3460
单调栈总结_进栈和出栈的算法思想
LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)
比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。 给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 10^9 + 7 取余 的结果。
Michael阿明
2021/09/06
8020
LeetCode笔记:496. Next Greater Element I
这里用一个stack来尝试得到数组二中每个数字后面的下一个更大数,用一个map来记录。遍历数组二,每次取栈顶的数字(也就是最近的上一个数字)判断当前数是否大于它,大于则说明此数就是栈顶数字的下一个更大数,记录到map中去,并继续循环取栈顶数比较(这很重要!),如果不大,那么放入stack,等待读取下一个数时做比较。这样遍历一次数组2就可以得到一个记录了有下一个更大数的map了,没记录在map中的说明就是没找到下一个更大数的。
Cloudox
2021/11/23
2100
LeetCode 84. 柱状图中最大的矩形(单调递增栈)
题目链接 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。
Michael阿明
2020/07/13
3840
LeetCode 84. 柱状图中最大的矩形(单调递增栈)
LeetCode 1944. 队列中可以看到的人数(单调栈)
有 n 个人排成一个队列,从左到右 编号为 0 到 n - 1 。 给你以一个整数数组 heights ,每个整数 互不相同,heights[i] 表示第 i 个人的高度。
Michael阿明
2021/09/06
4260
天池 开发者1024编程battle赛
题目地址: 【精神小伙场】水一波礼品队 【精神小伙场】次次AC队
Michael阿明
2021/02/19
3080
Leetcode 856. Score of Parentheses 括号得分(栈)
简而言之,遇到右括号就一直出栈并累加到一个值直到遇到左括号,这个累加值就表示这对括号的得分。如此周而复始到字符串结尾即可。
racaljk
2018/12/12
7230
推荐阅读
相关推荐
496. Next Greater Element I(Stack-Easy)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验