您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“使用BeautifulSoup在Python中抓取網頁內容的方法”,內容詳細,步驟清晰,細節處理妥當,希望這篇“使用BeautifulSoup在Python中抓取網頁內容的方法”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
簡單的答案是:并非每個網站都有用于獲取內容的 API。您可能想從您最喜歡的烹飪網站獲取食譜或從旅游博客獲取照片。如果沒有 API,提取 HTML 或抓取可能是獲取該內容的唯一方法。我將向您展示如何在 Python 中執行此操作。
注意:并非所有網站都喜歡抓取,有些網站可能會明確禁止。與網站所有者核對是否可以抓取。
為了讓網絡抓取在 Python 中工作,我們將執行 3 個基本步驟:
使用請求庫提取 HTML 內容。
分析 HTML 結構并識別包含我們內容的標簽。
使用 BeautifulSoup 提取標簽并將數據放入 Python 列表中。
讓我們首先安裝我們需要的庫。請求從網站獲取 HTML 內容。BeautifulSoup 解析 HTML 并將其轉換為 Python 對象。要為 Python 3 安裝這些,請運行:
pip3 install requests beautifulsoup4
在這個例子中,我將選擇抓取網站的技術部分。如果您轉到該頁面,您將看到一個包含標題、摘錄和發布日期的文章列表。我們的目標是創建一個包含該信息的文章列表。
技術頁面的完整 URL 是:
https://notes.ayushsharma.in/technology
我們可以使用 Requests 從此頁面獲取 HTML 內容:
#!/usr/bin/python3
import requests
url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)
print(data.text)
該變量data將包含頁面的 HTML 源代碼。
要從 中接收到的 HTML 中提取我們的數據data,我們需要確定哪些標簽具有我們需要的內容。
如果您瀏覽 HTML,您會在頂部附近找到此部分:
HTML:
<div class="col">
<a href="/2021/08/using-variables-in-jekyll-to-define-custom-content" class="post-card">
<div class="card">
<div class="card-body">
<h6 class="card-title">Using variables in Jekyll to define custom content</h6>
<small class="card-text text-muted">I recently discovered that Jekyll's config.yml can be used to define custom
variables for reusing content. I feel like I've been living under a rock all this time. But to err over and
over again is human.</small>
</div>
<div class="card-footer text-end">
<small class="text-muted">Aug 2021</small>
</div>
</div>
</a>
</div>
這是在每篇文章的整個頁面中重復的部分。我們可以看到.card-title有文章標題、.card-text摘錄和.card-footer > small發布日期。
讓我們使用 BeautifulSoup 提取這些內容。
Python:
#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
from pprint import pprint
url = 'https://notes.ayushsharma.in/technology'
data = requests.get(url)
my_data = []
html = BeautifulSoup(data.text, 'html.parser')
articles = html.select('a.post-card')
for article in articles:
title = article.select('.card-title')[0].get_text()
excerpt = article.select('.card-text')[0].get_text()
pub_date = article.select('.card-footer small')[0].get_text()
my_data.append({"title": title, "excerpt": excerpt, "pub_date": pub_date})
pprint(my_data)
上面的代碼將提取文章并將它們放入my_data變量中。我正在使用pprint漂亮打印輸出,但您可以在自己的代碼中跳過它。將上面的代碼保存在一個名為 的文件中fetch.py,然后使用以下命令運行它:
python3 fetch.py
如果一切順利,您應該會看到:
Python:
[{'excerpt': "I recently discovered that Jekyll's config.yml can be used to "
"define custom variables for reusing content. I feel like I've "
'been living under a rock all this time. But to err over and over '
'again is human.',
'pub_date': 'Aug 2021',
'title': 'Using variables in Jekyll to define custom content'},
{'excerpt': "In this article, I'll highlight some ideas for Jekyll "
'collections, blog category pages, responsive web-design, and '
'netlify.toml to make static website maintenance a breeze.',
'pub_date': 'Jul 2021',
'title': 'The evolution of ayushsharma.in: Jekyll, Bootstrap, Netlify, '
'static websites, and responsive design.'},
{'excerpt': "These are the top 5 lessons I've learned after 5 years of "
'Terraform-ing.',
'pub_date': 'Jul 2021',
'title': '5 key best practices for sane and usable Terraform setups'},
... (truncated)
讀到這里,這篇“使用BeautifulSoup在Python中抓取網頁內容的方法”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。