Python中Requests-get方法的使用
以https://books.toscrape.com/網(wǎng)站為例:
打開網(wǎng)頁
先把網(wǎng)頁打開,然后右鍵檢查,找到網(wǎng)絡(luò)一欄,這個時候發(fā)現(xiàn)下面是空白,什么也沒有:

刷新一下就好了,刷新之后:

點擊第一個進(jìn)行查看:

可以看到請求方法是"GET"方法,請求的URL也可以看到。
頁面的最下方可以發(fā)現(xiàn)頁面不止一頁,點擊到下一頁并且繼續(xù)檢查頁面:


現(xiàn)在使用相同的格式,輸入"https://books.toscrape.com/catalogue/page-1.html"進(jìn)行查看,發(fā)現(xiàn)回到了首頁。一般第一頁就是首頁,所以后面的路徑也不會加上/catalogue/page-2.html,可以多看幾個頁面就會發(fā)現(xiàn)。
使用代碼獲取頁面內(nèi)容
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}首先要添加爬蟲的頭部,因為很多頁面對爬蟲具有反爬的限制,加上頭部之后可以模擬正常的瀏覽器請求,成功幾率更高。這一部分在要訪問的頁面的請求頭部分:

url = "https://books.toscrape.com/catalogue/page-1.html"
這一部分聲明要訪問的網(wǎng)址。
responce = requests.get(url,headers=headers).text
把這一部分拆解開:
requests.get(url,headers=headers):帶著相應(yīng)的請求頭、以GET方式、訪問上面的URL。
requests.get(url,headers=headers).text:將上述內(nèi)容以文本的方式進(jìn)行返回。
responce = requests.get(url,headers=headers).text:將內(nèi)容返回給response這個變量。
查看結(jié)果

運行之后顯示出了相應(yīng)頁面的內(nèi)容。但格式有點凌亂,可以使用某些方法進(jìn)行調(diào)整。
頁面格式修改
這個時候就要引出BeautifulSoup這個庫。BeautifulSoup是一個Python庫,用于從HTML和XML文檔中提取數(shù)據(jù)。它提供了一種簡單和靈活的方式來解析和遍歷這些文檔,使得提取特定信息變得更加方便。
soup = BeautifulSoup(responce,"html.parser")
這一步的意義是將獲取的網(wǎng)頁內(nèi)容(響應(yīng)文本)使用BeautifulSoup進(jìn)行解析,以便能夠方便地提取和操作其中的數(shù)據(jù)。如果沒有這一步,那么無法使用BeautifulSoup的功能來解析網(wǎng)頁內(nèi)容。在沒有進(jìn)行解析的情況下,你將只是得到一個純文本的響應(yīng)內(nèi)容,難以直接提取所需的特定數(shù)據(jù)。你將不得不手動處理響應(yīng)內(nèi)容來查找、提取所需的信息,這是非常繁瑣和容易出錯的。
現(xiàn)在進(jìn)行print(soup)會發(fā)現(xiàn)頁面格式簡潔了很多。
語法解釋:
- response: 這是一個必需的參數(shù),表示要解析的文檔內(nèi)容。在這個例子中,response是通過發(fā)送HTTP請求獲取的網(wǎng)頁內(nèi)容,也就是服務(wù)器返回的響應(yīng)文本。它是一個字符串類型的變量,包含了HTML文檔的內(nèi)容。
- “html.parser”: 這是第二個參數(shù),它指定了使用的解析器。在這種情況下,使用的是Python內(nèi)置的HTML解析器,稱為"html.parser"。該解析器是BeautifulSoup庫的一個組成部分,可以將HTML文檔轉(zhuǎn)換為解析樹,以便進(jìn)行進(jìn)一步的處理和提取。
其他可選的解析器還有"lxml"和"html5lib"。它們都是第三方庫,具有不同的特性和性能。選擇合適的解析器取決于你的需求和環(huán)境。
綜上所述,BeautifulSoup(response, “html.parser”)中的兩個參數(shù)分別表示要解析的文檔內(nèi)容和使用的解析器類型。
爬取書名
使用爬蟲肯定是對內(nèi)容進(jìn)行爬取,接下來對書名進(jìn)行爬取。
思路大概分為幾步:相應(yīng)頁面的URL、請求頭的配置、頁面內(nèi)容的查看、代碼參數(shù)的配置。
URL以及請求頭都已經(jīng)配置完畢了,接下來對頁面內(nèi)容進(jìn)行查看,查看書名的地方都有什么特點:

可以發(fā)現(xiàn),外部都有一個h3,然后內(nèi)部被a標(biāo)簽給包圍住了,接下來看代碼:
soup = BeautifulSoup(responce,"html.parser")
all_title = soup.findAll("h3")對soup中的所有內(nèi)容進(jìn)行搜索,搜索其中包含在"h3"標(biāo)簽中的內(nèi)容,查看輸出:

可以發(fā)現(xiàn),確實輸出了"h3"標(biāo)簽中的內(nèi)容,但是其中的內(nèi)容并不是我們都想要的,接下來還要進(jìn)行過濾,看代碼:
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title)現(xiàn)在對每一個"h3"標(biāo)簽中的內(nèi)容進(jìn)行遍歷,然后找到其中"a"標(biāo)簽中的內(nèi)容,查看輸出:

針對于"a"標(biāo)簽中的內(nèi)容,我們不想要html中的標(biāo)簽,只想要html中的文本,所以繼續(xù)加參數(shù),看代碼:
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title.string)這里對于最后的print進(jìn)行了限制,輸出title的string類型,也就是只要其中的文本類型,查看輸出:

可以發(fā)現(xiàn),只輸出了書名,這個效果也正是我們想要的。
完整代碼以及注釋
代碼
from bs4 import BeautifulSoup
import requests
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}#請求頭改成自己的
url = "https://books.toscrape.com/catalogue/page-1.html"
responce = requests.get(url,headers=headers).text
soup = BeautifulSoup(responce,"html.parser")
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title.string)注釋
from bs4 import BeautifulSoup: 導(dǎo)入BeautifulSoup庫,這是為了使用其中的解析和提取功能。import requests: 導(dǎo)入requests庫,這是為了發(fā)送HTTP請求獲取網(wǎng)頁內(nèi)容。headers = {...}: 定義了一個字典類型的變量headers,其中包含了請求頭信息。這個請求頭信息中設(shè)置了User-Agent字段,模擬瀏覽器發(fā)送請求。url = "https://books.toscrape.com/catalogue/page-1.html": 定義了要爬取的目標(biāo)網(wǎng)頁的URL地址。response = requests.get(url, headers=headers).text: 發(fā)送HTTP GET請求到指定的URL,并獲取響應(yīng)對象。.text將響應(yīng)內(nèi)容以文本形式返回。將獲取到的響應(yīng)文本賦值給response變量。soup = BeautifulSoup(response, "html.parser"): 使用BeautifulSoup庫將獲取到的響應(yīng)文本進(jìn)行解析,創(chuàng)建一個BeautifulSoup對象。傳入?yún)?shù)response作為要解析的文檔內(nèi)容,以及解析器類型"html.parser"。all_title = soup.findAll("h3"): 使用BeautifulSoup對象的findAll方法,查找所有<h3>標(biāo)簽,并將結(jié)果存儲在變量all_title中。findAll返回一個列表,其中包含了所有匹配的標(biāo)簽。for i in all_title:: 對于all_title列表中的每個元素進(jìn)行迭代。title = i.find("a"): 在當(dāng)前迭代的<h3>標(biāo)簽中,使用find方法查找第一個<a>標(biāo)簽,并將結(jié)果存儲在變量title中。print(title.string): 打印title標(biāo)簽的文本內(nèi)容,即書籍的標(biāo)題。使用.string獲取標(biāo)簽內(nèi)的文本。
這段代碼的作用是從指定的網(wǎng)頁中爬取書籍標(biāo)題信息,并將其打印出來。它使用requests庫發(fā)送HTTP請求獲取網(wǎng)頁內(nèi)容,然后使用BeautifulSoup庫解析網(wǎng)頁并提取所需信息。最后通過循環(huán)打印出每個書籍的標(biāo)題。
翻頁查詢所有
放到下一篇詳細(xì)進(jìn)行介紹。
到此這篇關(guān)于Python中Requests-get方法的使用的文章就介紹到這了,更多相關(guān)Python Requests-get內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 中的list和array的不同之處及轉(zhuǎn)換問題
python中的list是python的內(nèi)置數(shù)據(jù)類型,list中的數(shù)據(jù)類不必相同的,而array的中的類型必須全部相同。這篇文章給大家介紹了python 中的list和array的不同之處及轉(zhuǎn)換問題,需要的朋友參考下吧2018-03-03
python smtplib模塊自動收發(fā)郵件功能(二)
這篇文章主要為大家詳細(xì)介紹了python smtplib模塊自動收發(fā)郵件功能的第二篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Python3網(wǎng)絡(luò)爬蟲開發(fā)實戰(zhàn)之極驗滑動驗證碼的識別
本節(jié)我們的目標(biāo)是用程序來識別并通過極驗驗證碼的驗證,其步驟有分析識別思路、識別缺口位置、生成滑塊拖動路徑,最后模擬實現(xiàn)滑塊拼合通過驗證。需要的朋友可以參考下2019-08-08
深入掌握Python模塊創(chuàng)建導(dǎo)入和使用
這篇文章主要為大家介紹了深入掌握Python模塊創(chuàng)建導(dǎo)入和使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
深入詳解Python的def定義函數(shù)與參數(shù)傳遞基礎(chǔ)
def定義函數(shù)與參數(shù)傳遞基礎(chǔ)是Python編程中的核心知識點之一,掌握這項技能對于提升編程效率和應(yīng)用效果至關(guān)重要,下面小編就和大家詳細(xì)介紹一下吧2026-05-05

