使用 Python 对新闻文章进行网络抓取--2024 年的最佳方法

蟒蛇, Jan-04-20235 分钟阅读

新闻是了解全球正在发生的事情的最佳途径。对于数据工程师来说,新闻报道是收集超现实数据量的最佳途径之一。更多的数据意味着更多的洞察力,只有这样,我们的技术才能不断创新,人类才能达到前所未有的高度。但是

新闻是了解全球正在发生的事情的最佳途径。对于数据工程师来说,新闻报道是收集超现实数据量的最佳途径之一。更多的数据意味着更多的洞察力,只有这样,我们的技术才能不断创新,人类才能达到前所未有的高度。但是,新闻数量庞大,要手动获取所有数据是不可能的。自动获取数据的最佳方法是什么?答案就是使用 python 进行新闻文章的网络搜刮。

在本文中,我们将创建一个网络抓取器,从不同的报纸上抓取最新的新闻文章,并将其存储为文本。我们将通过以下两个步骤来深入分析整个过程是如何完成的。

使用 Python和著名的 BeautifulSoup 库进行Web 搜索

欢迎跳转到任何章节,了解更多有关如何使用 python 执行新闻文章网络搜刮的信息

目录

网页和 HTML 入门

如果我们想从任何网站或网页上提取重要信息,就必须了解该网站是如何工作的。当我们使用任何网络浏览器(Chrome、Firefox、Mozilla 等)访问特定 URL 时,该网页是三种技术的组合、

HTML(超文本标记语言):HTML 定义了网页的内容。它是向网站添加内容的标准标记语言。例如,如果你想在网站上添加文字、图片或其他内容,HTML 可以帮你实现。

CSS(层叠样式表):用于设计网页样式。CSS 可以处理你在特定网站上看到的所有视觉设计。

JavaScriptJavaScript 是网页的大脑。JavaScript 负责处理所有逻辑和网页功能。因此,它可以使内容和样式具有交互性。

通过这三种编程语言,我们可以创建和操作网页的各个方面。

我想你应该知道网页和 HTML 的基础知识。一些 HTML 概念,如 divs、标签、标题等,可能会在创建此网页刮擦工具时非常有用。你不需要什么都知道,只需了解网页设计的基础知识以及信息是如何包含在网页中的,我们就可以开始了。

使用 Python 中的 BeautifulSoup 对新闻文章进行网络抓取

Python 有几个软件包可以让我们从网页中抓取信息。我们将继续使用 BeautifulSoup,因为它是最著名、最易用的 Python 网络搜刮库之一。

BeautifulSoup 最适合解析 URL 的 HTML 内容,并通过标记和标签来访问这些内容。因此,从网站中提取某些文本将非常方便。

只需 3-5 行代码,我们就能从互联网上神奇地提取我们所选网站的任何类型文本,这充分说明它是一个易于使用但功能强大的软件包。

我们从最基础的开始。要安装库软件包,请在 Python 发行版中输入以下命令、

pipinstallbeautifulsoup4

我们还将使用 "请求模块",因为它能为 BeautifulSoup 提供任何页面的 HTML 代码。要安装它,请在 Python 发行版中输入以下命令、

pipinstallrequests

该请求模块将允许我们从网页中获取 HTML 代码,并使用 BeautfulSoup 软件包进行导航。以下两个命令将使我们的工作变得更加轻松

find_all(element tag, attribute):该函数以 tag 和属性为参数,允许我们查找网页中的任何 HTML 元素。它会识别所有相同类型的元素。我们可以使用 find() 代替它,只获取第一个元素。

get_text():找到指定元素后,该命令允许我们提取内部文本。

要浏览网页的 HTML 代码并找到要搜索的元素,我们可以在网页上单击右键或直接按 Ctrl+F 键,使用 "检查元素 "选项。这样就能看到网页的源代码。

找到感兴趣的元素后,我们将通过请求模块获取 HTML 代码,并使用 BeautifulSoup 提取这些元素。

在本文中,我们将使用《EL 巴黎英语报》进行搜索。我们将从头版抓取新闻文章标题,然后抓取正文。

如果我们查看新闻文章的 HTML 代码,就会发现头版文章的结构是这样的、

The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:

导入请求
bs4导入BeautifulSoup

使用请求模块获取 HTML 内容后,我们可以将其保存到 coverpage 变量中:

# 请求
r1 = requests.get(url)
r1.status_code
 
# 我们将在 coverpage 中保存封面页内容
coverpage = r1.content

接下来,我们将定义汤变量、

# 创建汤
soup1= BeautifulSoup(coverpage,'html5lib')

在下面一行代码中,我们将找到要查找的元素、

# 新闻识别
coverpage_news= soup1.find_all('h2', class_='articulo-titulo')

使用 final_all,我们将获得所有的出现次数。因此,它必须返回一个列表,其中每个条目都是一篇新闻报道、

为了提取文本,我们将使用以下命令:

coverpage_news[4].get_text()

如果我们要访问一个属性(在我们的例子中是链接)的值,可以使用以下命令、

coverpage_news[4]['href']

这样我们就可以获得纯文本链接。

如果你已经掌握了到此为止的所有概念,那么你就可以网络搜刮自己选择的任何内容。

下一步包括使用 href 属性访问新闻文章的每条内容,获取源代码以查找 HTML 代码中的段落,最后使用 BeautifulSoup 获取它们。这个过程与上述过程相同,但我们需要定义标识新闻文章内容的标记和属性。

完整功能的代码如下。由于代码有注释,我就不逐行解释了;只要阅读这些注释,就能清楚地理解代码。

文章数量=5
# 内容、链接和标题的空列表
news_contents = []
list_links = []
list_titles = []
 
forninnp.arange(0, number_of_articles):
    
   # 只有新闻文章(还有专辑和其他内容)
   if "inenglish"notincoverpage_news[n].find('a')['href']:  
       继续
    
   # 获取文章链接
   link= coverpage_news[n].find('a')['href']: 继续
    list_links.append(link)
    
   # 获取标题
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
   # 阅读内容(按段落划分)
    article = requests.get(link)
    article_content = article.content
    soup_article = BeautifulSoup(article_content,'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = body[0].find_all('p')
    
   # 统一段落
    list_paragraphs = []
   forpinnp.arange(0, len(x)):
        paragraph = x[p].get_text()
        list_paragraphs.append(paragraph)
        final_article =" ".join(list_paragraphs)
        
    news_contents.append(final_article)

让我们把摘录的文章归纳如下:

  • 将输入模型(df_features)的数据集。
  • 带有标题和链接(df_show_info)的数据集。
# df_features
df_features = pd.DataFrame(
     {'Article Content': news_contents 
    })
 
# df_show_info
df_show_info = pd.DataFrame(
    {'Article Title': list_titles,
     'Article Link': list_links})
df_features
df_show_info

为了定义更好的用户体验,我们还将测量脚本获取新闻所需的时间。我们将为此定义一个函数,然后调用。同样,我不会解释每一行代码,因为代码都有注释。要想获得清晰的理解,可以阅读这些注释。

def get_news_elpais():
    
    # url definition
    url = "https://elpais.com/elpais/inenglish.html"
    
    # Request
    r1 = requests.get(url)
    r1.status_code
 
    # We'll save in coverpage the cover page content
    coverpage = r1.content
 
    # Soup creation
    soup1 = BeautifulSoup(coverpage, 'html5lib')
 
    # News identification
    coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
    len(coverpage_news)
    
    number_of_articles = 5
 
    # Empty lists for content, links and titles
    news_contents = []
    list_links = []
    list_titles = []
 
    for n in np.arange(0, number_of_articles):
 
        # only news articles (there are also albums and other things)
        if "inenglish" not in coverpage_news[n].find('a')['href']:  
            continue
 
        # Getting the link of the article
        link = coverpage_news[n].find('a')['href']
        list_links.append(link)
 
        # Getting the title
        title = coverpage_news[n].find('a').get_text()
        list_titles.append(title)
 
        # Reading the content (it is divided in paragraphs)
        article = requests.get(link)
        article_content = article.content
        soup_article = BeautifulSoup(article_content, 'html5lib')
        body = soup_article.find_all('div', class_='articulo-cuerpo')
        x = body[0].find_all('p')
 
        # Unifying the paragraphs
        list_paragraphs = []
        for p in np.arange(0, len(x)):
            paragraph = x[p].get_text()
            list_paragraphs.append(paragraph)
            final_article = " ".join(list_paragraphs)
 
        news_contents.append(final_article)
 
    # df_features
    df_features = pd.DataFrame(
         {'Content': news_contents 
        })
 
    # df_show_info
    df_show_info = pd.DataFrame(
        {'Article Title': list_titles,
         'Article Link': list_links,
         'Newspaper': 'El Pais English'})
    
    return (df_features, df_show_info)

使用 Python 进行新闻文章网络抓取的最佳代理是什么?

ProxyScrape是网上最受欢迎、最可靠的代理服务提供商之一。三种代理服务包括专用数据中心代理服务器、住宅代理服务器和高级代理服务器。那么,使用 python 进行新闻文章网络搜刮的最佳 HTTP 代理的最佳解决方案是什么?在回答这个问题之前,最好先了解一下每种代理服务器的特点。

专用数据中心代理最适合高速在线任务,如从不同服务器流式传输大量数据(就大小而言)以进行分析。这也是企业选择专用代理在短时间内传输大量数据的主要原因之一。

专用数据中心代理具有多种功能,如无限带宽和并发连接、便于通信的专用 HTTP 代理以及更安全的 IP 验证。专用数据中心的正常运行时间为 99.9%,在任何会话期间都能正常工作,您大可放心。最后但同样重要的是,ProxyScrape 提供优质的客户服务,将在 24-48 个工作小时内帮助您解决问题。 

其次是住宅代理。住宅代理是每个普通消费者的首选代理。主要原因是住宅代理的 IP 地址与 ISP 提供的 IP 地址相似。这意味着从目标服务器获得访问其数据的许可会比平常更容易。 

ProxyScrape住宅代理的另一个特点是轮换功能。旋转代理可以帮助您避免账户被永久封禁,因为住宅代理会动态更改您的 IP 地址,使目标服务器难以检查您是否在使用代理。 

除此之外,住宅代理的其他功能还包括:无限带宽、并发连接、专用 HTTP/s 代理、随时会话代理(因为代理池中有 700 多万个代理)、用户名和密码验证以提高安全性,最后但并非最不重要的一点是能够更改国家服务器。您可以通过在用户名验证中附加国家代码来选择所需的服务器。 

最后一种是高级代理。高级代理与专用数据中心代理相同。功能保持不变。主要区别在于可访问性。在高级代理中,代理列表(包含代理的列表)向ProxyScrape网络上的每个用户开放。这就是为什么高级代理的成本低于专用数据中心代理的原因。

那么,使用 python 进行新闻文章网络搜刮的最佳 HTTP 代理的最佳解决方案是什么呢?答案就是 "住宅代理"。原因很简单。如上所述,住宅代理是一种旋转代理,这意味着您的 IP 地址会在一段时间内动态变化,这有助于在较短的时间内发送大量请求,从而欺骗服务器,而不会遭到 IP 屏蔽。 

接下来,最好是根据国家更改代理服务器。您只需在 IP 验证或用户名和密码验证的末尾添加国家 ISO_CODE。 

推荐阅读

抓取 YouTube 评论 - 5 个简单步骤2023 年八大最佳 Python 网络抓取工具

常见问题:

1.使用 python 搜索新闻文章的最佳方法是什么?
该 python 库名为 "BeautifulSoup",可以自动从任何新闻文章中抓取数据。唯一的要求是具备基本的 HTML 知识,以便从页面源代码中找到包含需要抓取的数据的 HTML 标签。
2.从网站上搜刮新闻报道可以吗?
答案是这取决于网站的条款和条件。但大多数新闻文章都可以被搜刮,因为所有信息都是有意提供给公众的。只要你的搜刮方法不损害数据或网站所有者,所有公共数据都可以被搜刮。
3.如何使用 Python 搜索 Google 新闻?
借助名为 "BeautifulSoup "的 python 库,您可以使用 python 浏览 Google 新闻或任何新闻文章。安装该库和可靠的住宅代理,以防止目标服务器屏蔽 IP。

总结

在本文中,我们通过了解网页流程设计和结构的基础知识,了解了网络刮擦的基础知识。我们还通过从新闻文章中提取数据获得了实践经验。如果操作得当,网络搜索可以创造奇迹。例如,可以根据提取的数据建立一个全面优化的模型,该模型可以预测类别并向用户显示摘要。最重要的是弄清自己的需求并了解页面结构。Python 有一些非常强大但易于使用的库,可用于提取您所选择的数据。这使得网络搜索变得非常简单和有趣。  

需要注意的是,这段代码只适用于从这个特定网页中提取数据。如果我们想从其他页面提取数据,则需要根据该页面的结构优化代码。不过,一旦我们知道了如何识别它们,过程就完全一样了。

本文希望深入讲解使用 python 进行新闻文章网络搜刮的实用方法。需要记住的一点是,代理是网络搜刮的绝对必要条件。它有助于防止目标服务器的 IP 屏蔽。 ProxyScrape在使用 python 项目进行新闻文章网络搜刮时,《Python.org》为您提供了一个优秀而可靠的住宅代理。