深色proxyscrape 徽标

Web Scraping for News Articles using Python– Best Way In 2024

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

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

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

  1. 网页和 HTML 的浅显介绍。
  2. 使用 Python和名为 BeautifulSoup 的著名库进行网络搜索

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

目录

网页和 HTML 入门

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

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

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

JavaScript JavaScript 是网页的大脑。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。 

推荐阅读

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

常见问题:

1. What is the best way to scrape news articles using python?
The python library is called “BeautifulSoup” and can automatically scrape data from any news article. The only requirement would be a basic knowledge of HTML for locating the HTML tag from the page source code that contains the data that needs to be scraped.
2. Is it okay to scrape news articles from the website?
答案是这取决于网站的条款和条件。但大多数新闻文章都可以被搜刮,因为所有信息都是有意提供给公众的。只要你的搜刮方法不损害数据或网站所有者,所有公共数据都可以被搜刮。
3. How do I scrape Google News using Python?
在名为 "BeautifulSoup "的 python 库的帮助下,您可以使用 python 浏览 Google 新闻或任何新闻文章。安装该库和可靠的住宅代理,以防止目标服务器屏蔽 IP。

总结

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

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

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