paint-brush
如何构建 Python Web Scraper:从任何网站抓取数据经过@terieyenike
8,579 讀數
8,579 讀數

如何构建 Python Web Scraper:从任何网站抓取数据

经过 Teri4m2022/09/08
Read on Terminal Reader
Read this story w/o Javascript

太長; 讀書

Python 允许您使用 Python 脚本从网站上抓取或抓取数据。这种收集数据的方法称为网络抓取。大多数网站不希望你抓取他们的数据,为了找出什么是合法的和允许抓取的,网站有一个专门的页面,显示允许的端点的详细信息。在这个练习中,我们抓取新闻内容的主页,我们可以根据用户代理来完成。编写完整个脚本后,我们的页面应该会从 YCombinator 的新闻主页中抓取数据。
featured image - 如何构建 Python Web Scraper:从任何网站抓取数据
Teri HackerNoon profile picture

在本文中,我们将构建一个程序,允许您使用 Python 脚本从网站上抓取或抓取数据。这种收集数据的方法称为网络抓取。

网页抓取就是使用 Python 或任何其他编程语言以编程方式下载、清理和使用网页中的数据。大多数网站不希望你抓取他们的数据,为了找出什么是合法的和允许抓取的,网站有一个专门的页面,显示允许的端点的详细信息。

将 robots.txt 附加到任何链接的末尾,以了解允许的端点。例如,让我们使用https://news.ycombinator.com/robots.txt

使用下面的文本文件,结果应如下所示:

截图说明了我们被允许和不允许从 YCombinator 网站上抓取的端点。抓取延迟意味着在使用程序从网站抓取数据时暂停,从而不会因为不断抓取而导致其服务器超载并减慢网站速度。

在这个练习中,我们抓取新闻内容的主页,我们可以根据用户代理来完成。

入门

Python web scraper 需要两个必要的模块来抓取数据:

  • 美丽的汤
  • 要求

美丽的汤

Beautiful Soup 是一个 Python 库,用于从 HTML 文件中提取数据。它使用解析器修改文件,将数据转换为有价值的文档,并为程序员节省数小时的手动和重复性工作。

要求

requests HTTP 库用于使用带有

.get()
功能。

创建 Web Scraper

现在来看看这个项目的本质。创建一个新目录,并在其中创建一个文件,该文件将包含网络爬虫程序的所有脚本。

复制并粘贴以下代码:

 # app.py import requests response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)

上面的代码执行以下操作:

  • 导入
    requests
    模块
  • 使用响应变量,附加到
    .get()
    功能从提供的网站链接下载 HTML 文件
  • 阅读网页的内容
    .text

如果您使用命令 python 运行此代码

app.py
它没有给你任何输出,这意味着需要安装两个导入的模块。

运行以下命令来安装模块。

 pip3 install requests pip install beautifulsoup4

源代码的结果应如下所示:

接下来,让我们更新

app.py
使用漂亮的汤与其余代码一起文件:

 # main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text # add this 
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = {  "title" : article_title,  "link" : article_link,  "point" : article_upvote } print(result)

按照上面的代码片段执行以下操作:

  • 从模块bs4导入 BeautifulSoup 函数
  • 接下来,使用变量soup从
    yc_web_page
    使用 BeautifulSoup 功能和
    html.parser
    获取 HTML 文件

在浏览其余代码之前,让我们使用提供的链接打开我们的网络浏览器

.get()

接下来,在页面上右击,点击inspect,查看YCombinator新闻页面的elements选项卡。

我们的网页应该是这样的:

使用 Beautiful Soup,我们可以使用它们的类名来定位页面上的特定元素:

  • 通过分配 article_tag 变量,每个页面元素都有一个标签名称,使用
    find()
    具有元素名称、 a标签和
    class_
    带下划线。这样做是为了防止覆盖网页元素中的类
  • 现在,我们要提取的链接标题之一
    article_tag
    使用
    .get_text()
    功能
  • 接下来,提取链接
    article_tag
    使用属性
    href
    .get()
    功能
  • 这同样适用于
    article_upvote
    变量,其中标签名称,
     <span>
    , 类名用于提取每篇文章链接的点数
  • 创建一个变量结果,将提取的数据显示为带有键和值对的字典
  • 打印出最终结果

编写完整个脚本后,我们的页面应该会从 YCombinator 的新闻主页中抓取数据,如下所示:

结论

本文教你如何使用 Python 网络爬虫从网页中提取数据。

此外,使用网络抓取工具的功能还在于,它可以节省时间和精力来更快地而不是手动地生成大型数据集。

学到更多