python爬蟲爬取某圖書網(wǎng)頁實例講解
下面是通過requests庫來對ajax頁面進行爬取的案例,與正常頁面不同,這里我們獲取url的方式也會不同,這里我們通過爬取一個簡單的ajax小說頁面來為大家講解。(注:結尾附贈全部代碼與詳細注釋)
導入相應的庫
爬取數(shù)據(jù)必須有相應的庫,這里我們使用爬蟲腳本中常用的幾個Python庫:os.path、fake_useragent 和 requests。
1.os.path:
- 這個模塊主要用于處理文件和目錄的路徑。它提供了一系列的功能來進行路徑的拼接、拆分、查詢等操作,以確保路徑的跨平臺兼容性(比如Windows和Unix/Linux系統(tǒng)的路徑分隔符不同)。
- 在爬蟲中,os.path 通常用于構建本地文件系統(tǒng)的路徑,以便保存從網(wǎng)絡上下載的圖片、文本數(shù)據(jù)等。
2.fake_useragent:
- 這個庫用于生成隨機的、看起來像是真實瀏覽器的User-Agent字符串。User-Agent是一個在HTTP請求中發(fā)送給服務器的頭部信息,它告訴服務器發(fā)起請求的客戶端(通常是瀏覽器)的類型、版本和操作系統(tǒng)等信息。
- 在爬蟲中,由于許多網(wǎng)站會檢查User-Agent來識別爬蟲請求并阻止它們,因此使用fake_useragent可以幫助爬蟲繞過這種簡單的反爬蟲機制。
3.requests:
- requests是Python中非常流行的HTTP庫,用于發(fā)送HTTP/1.1請求。它提供了一個簡單易用的API,用于處理各種HTTP請求,如GET、POST、PUT、DELETE等。
- 在爬蟲中,requests庫是發(fā)送網(wǎng)絡請求并獲取響應的主要工具。它支持會話(Session)對象、HTTPS請求、文件上傳、Cookie處理、重定向、連接池等功能,非常適合用于構建復雜的爬蟲系統(tǒng)。
import os.path import fake_useragent import requests
正確地設置代碼的基礎部分
這里我們生成一個隨機的User-Agent、檢查并創(chuàng)建目錄以便儲存爬取的圖片、以及打開(或創(chuàng)建)一個文本文件來保存數(shù)據(jù)。
import os.path import fake_useragent import requests # 判斷是否是直接運行該腳本 if __name__ == '__main__': head = {"User-Agent": fake_useragent.UserAgent().random} if not os.path.exists("./biqugePic"): os.mkdir("./biqugePic") f = open("./biquge.txt", 'w', encoding='utf8')
設置循環(huán)遍歷
循環(huán)遍歷URL(這里為大家提供具體url的獲取方法,并循環(huán)了1至9頁的數(shù)據(jù)為大家做案例),并發(fā)送了帶有隨機User-Agent的GET請求。這是爬蟲中常見的做法,用于從網(wǎng)站的不同頁面獲取數(shù)據(jù)。
for i in range(1, 10): url = f"https://www.bqgui.cc/json?sortid=1&page={i}" resp = requests.get(url, headers=head)
首先進入網(wǎng)頁,點擊F12打開自定義與控制工具,點擊fecth/XHR,此時顯示部分為空白。
這個時候我們滾動鼠標滾輪,就會出現(xiàn)相應的url,這里的https://www.bqgui.cc/json?sortid=1&page=2,其中尾部2表示滾輪頁面第二頁,想要獲取1至9我們只需要進行一個簡單的循環(huán)遍歷即可。
遍歷URL
遍歷從URL獲取的JSON響應,該響應包含多個項目。對于每個項目,您都提取了圖片URL、文章名、作者和簡介,并計劃將這些信息打印到控制臺以及下載圖片和保存文本信息到文件。
for item in resp.json(): # 從每個JSON對象中提取所需的信息 img_url = item['url_img'] articlename = item['articlename'] author = item['author'] intro = item["intro"] # 打印提取的信息到控制臺 print(img_url, author, articlename, intro) # 發(fā)送另一個GET請求到圖片URL,以獲取圖片內(nèi)容 img_rest = requests.get(img_url, headers=head)
保存圖片和文檔
設置代碼來保存圖片到以文章名命名的文件中,并將作者、文章名和簡介信息寫入到"./biquge.txt"文件中。
with open(f"./biqugePic/{articlename}.jpg", "wb") as fp: # 將圖片內(nèi)容寫入文件 fp.write(img_rest.content) # 將作者、文章名和簡介信息寫入到"./biquge.txt"文件中 f.write(author + '#' + articlename + '#' + intro + "\n")
全部代碼即詳細注釋
import os.path import fake_useragent import requests # 判斷是否是直接運行該腳本 if __name__ == '__main__': # 創(chuàng)建一個包含隨機User-Agent的HTTP請求頭 head = {"User-Agent": fake_useragent.UserAgent().random} # 檢查是否存在名為"./biqugePic"的文件夾,如果不存在則創(chuàng)建它 if not os.path.exists("./biqugePic"): os.mkdir("./biqugePic") # 以寫入模式打開(或創(chuàng)建)一個名為"./biquge.txt"的文件,用于保存數(shù)據(jù) f = open("./biquge.txt", 'w', encoding='utf8') # 循環(huán)從第1頁到第9頁(注意,range函數(shù)是左閉右開的,所以不包括10) for i in range(1, 10): # 構造請求URL,這里假設每個頁面的數(shù)據(jù)都可以通過此URL以JSON格式獲取 url = f"https://www.bqgui.cc/json?sortid=1&page={i}" # 發(fā)送GET請求到URL,并帶上之前創(chuàng)建的請求頭 resp = requests.get(url, headers=head) # 假設服務器返回的是JSON格式的數(shù)據(jù),我們遍歷這些數(shù)據(jù) # 注意:這里有個潛在的問題,因為內(nèi)部循環(huán)的變量也使用了'i',這會覆蓋外層循環(huán)的'i' # 為了避免混淆,應該使用另一個變量名,比如'item' for item in resp.json(): # 從每個JSON對象中提取所需的信息 img_url = item['url_img'] articlename = item['articlename'] author = item['author'] intro = item["intro"] # 打印提取的信息到控制臺 print(img_url, author, articlename, intro) # 發(fā)送另一個GET請求到圖片URL,以獲取圖片內(nèi)容 img_rest = requests.get(img_url, headers=head) # 打開(或創(chuàng)建)一個文件,用于保存圖片,文件名基于文章名 with open(f"./biqugePic/{articlename}.jpg", "wb") as fp: # 將圖片內(nèi)容寫入文件 fp.write(img_rest.content) # 將作者、文章名和簡介信息寫入到"./biquge.txt"文件中 f.write(author + '#' + articlename + '#' + intro + "\n")
注意:
- 代碼假設了服務器返回的JSON結構是固定的,并且每個對象都包含’url_img’, ‘articlename’, ‘author’, 和 'intro’鍵。
- 在實際應用中,網(wǎng)絡請求可能會失?。ㄈ?04、500等HTTP錯誤),應該添加錯誤處理邏輯。
- 由于網(wǎng)絡延遲和帶寬限制,大量請求可能會導致性能問題或被服務器封鎖。
- 使用fake_useragent生成隨機User-Agent可以幫助繞過一些簡單的反爬蟲機制,但不一定對所有網(wǎng)站都有效。
到此這篇關于python爬蟲爬取某圖書網(wǎng)頁實例的文章就介紹到這了,更多相關python爬蟲爬取某圖書網(wǎng)頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
PyCharm Python Console中文輸出亂碼問題及解決
這篇文章主要介紹了PyCharm Python Console中文輸出亂碼問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Python 實現(xiàn)網(wǎng)頁自動截圖的示例講解
今天小編就為大家分享一篇Python 實現(xiàn)網(wǎng)頁自動截圖的示例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05python用selenium打開瀏覽器后秒關閉瀏覽器的解決辦法
最近朋友在學Selenium的時候遇到一個問題,當執(zhí)行完selenium程序后,瀏覽器會閃退也就是自動關閉,這篇文章主要給大家介紹了關于python用selenium打開瀏覽器后秒關閉瀏覽器的解決辦法,需要的朋友可以參考下2023-07-07