50行爬蟲?️抓取並處理圖靈書目
使用 requests進行爬取、BeautifulSoup進行資料提取。
主要分成兩步: 第一步是解析圖書列表頁,並解析出裡面的圖書詳情頁連結。 第二步是解析圖書詳情頁,提取出感興趣的內容,本例中根據不同的資料情況,採用了不同的提取方法,總的感覺就是BeautifulSoup用起來很方便?
參考《Python資料處理》第11章 網頁抓取:獲取並儲存網路資料。
以下是幾個典型HTML內容提取的Python程式碼片段
1、提取詳情頁連結
列表頁中的詳情頁連結片段
<h4 class="name">
<a href="/book/1921" title="深度學習入門:基於Python的理論與實現">
深度學習入門:基於Python的理論與實現
</a>
</h4>
提取詳情頁連結的Python程式碼
# bs是BeautifulSoup的instance
bs.select('.name')
for 詳情連結資訊 in bs.select('.name'):
# 提取出連結
print(詳情連結資訊.a.get('href'))
2、提取詳情頁中的圖書名稱
詳情頁中圖書名稱HTML程式碼
<h2>
深度學習入門:基於Python的理論與實現
</h2>
提取圖書名稱的Python程式碼
# 因為提取出來的文字前後還帶了很多空格,所以要用strip去掉
bs.h2.get_text().strip()
3、提取電子書價格資訊
詳情頁中電子書價格HTML程式碼
<dt>電子書</dt>
<dd>
<span class="price">¥29.99</span>
</dd>
提取電子書價格的Python程式碼
# 因為不是每本書都有電子書,所以要判斷一下
有電子書 = bs.find("dt", text="電子書")
if 有電子書:
價格=有電子書.next_sibling.next_sibling.find("span", {"class": "price"}).get_text().strip()[1:]
print(float(價格))
完整程式碼
# ituring.py,python3版本,預設只抓兩頁,可以通過啟動引數控制要抓的列表頁範圍
import sys
import requests
import time
from bs4 import BeautifulSoup
def 輸出圖書列表中的詳情連結(bs):
# 找到頁面中所有的 <h4 class="name"><a href="/book/...">...</a></h4>
for 詳情連結資訊 in bs.select('.name'):
# 提取出連結
yield 詳情連結資訊.a.get('href')
def 獲取圖書詳情(連結):
詳情頁 = requests.get('http://www.ituring.com.cn%s' %連結)
if 詳情頁.ok:
bs = BeautifulSoup(詳情頁.content, features="html.parser")
圖書 = {}
圖書['title'] = bs.h2.get_text().strip()
圖書['status'] = bs.find("strong", text="出版狀態").next_sibling
有定價 = bs.find("strong", text="定 價")
if 有定價:
圖書['price'] = 有定價.next_sibling
有電子書 = bs.find("dt", text="電子書")
if 有電子書:
圖書['ePrice'] = float(有電子書.next_sibling.next_sibling.find("span", {"class": "price"}).get_text().strip()[1:])
有出版日期 = bs.find("strong", text="出版日期")
if 有出版日期:
圖書['date'] = 有出版日期.next_sibling
圖書['tags'] = []
for tag in bs.select('.post-tag'):
圖書['tags'].append(tag.string)
return 圖書
else:
print('❌ 詳情頁 http://www.ituring.com.cn%s' %連結)
def 解析圖書列表頁(起始頁, 終止頁):
for 頁序號 in range(起始頁 - 1, 終止頁):
# 逐一訪問圖書列表頁面
列表頁 = requests.get('http://www.ituring.com.cn/book?tab=book&sort=new&page=%s' %頁序號)
if 列表頁.ok:
# 建立 BeautifulSoup 的 instance
bs = BeautifulSoup(列表頁.content, features="html.parser")
# 提取 列表頁中的 詳情頁連結,並逐一分析
for 詳情頁面連結 in 輸出圖書列表中的詳情連結(bs):
圖書資訊 = 獲取圖書詳情(詳情頁面連結)
# 得到的圖書資訊,按照自己的需求去處理吧
print(圖書資訊)
# 抓完一本書休息一下
time.sleep(0.1)
print('✅ 第%s頁獲取完畢\n\t' %(頁序號 + 1))
else:
print('❌ 第%s頁獲取出錯\n\t' %(頁序號 + 1))
if __name__ == '__main__':
# 預設圖書列表起始頁 和 終止頁
起始圖書列表頁碼 = 1
終止圖書列表頁碼 = 2 # ⚠️ 改改內碼表可以實現自動獲得最後一頁
# 獲取輸入引數; ⚠️此處未對輸入引數的型別做檢測
if(len(sys.argv)==2):
# 只有一個引數時,輸入的是終止頁碼,起始頁碼預設為 0
終止圖書列表頁碼 = int(sys.argv[1])
if(len(sys.argv)==3):
# 有兩個引數時, 第一個引數是起始頁碼,第二個引數是終止頁碼
起始圖書列表頁碼 = int(sys.argv[1])
終止圖書列表頁碼 = int(sys.argv[2])
解析圖書列表頁(起始圖書列表頁碼, 終止圖書列表頁碼)
相關文章
- 圖靈樣書爬蟲 - Python 爬蟲實戰圖靈爬蟲Python
- 爬蟲練手:使用scrapy抓取噹噹網程式設計類圖書資訊,並儲存到MySQL爬蟲程式設計MySql
- 爬蟲 Scrapy框架 爬取圖蟲圖片並下載爬蟲框架
- Python爬蟲js處理Python爬蟲JS
- HTTP爬蟲被封如何處理?HTTP爬蟲
- 爬蟲抓取UserAgent問題爬蟲
- 網路爬蟲:使用Scrapy框架編寫一個抓取書籍資訊的爬蟲服務爬蟲框架
- 網路爬蟲: 從allitebooks.com抓取書籍資訊並從amazon.com抓取價格(3): 根據書籍ISBN碼抓取amazon.com價格...爬蟲
- 爬蟲原理與資料抓取爬蟲
- Python爬蟲抓取股票資訊Python爬蟲
- Google 爬蟲如何抓取 JavaScript 的?Go爬蟲JavaScript
- 爬蟲app資訊抓取之apk反編譯抓取爬蟲APPAPK編譯
- Day1--豆瓣圖書爬蟲爬蟲
- python爬蟲抓取哈爾濱天氣資訊(靜態爬蟲)Python爬蟲
- 爬蟲 | 處理cookie的基本方法——session爬蟲CookieSession
- 爬蟲抓取網頁資料原理爬蟲網頁
- 網路爬蟲之抓取郵箱爬蟲
- Python 爬蟲 + 人臉檢測 —— 知乎高顏值圖片抓取Python爬蟲
- 京東商品圖片 自動下載 抓取 c# 爬蟲C#爬蟲
- 一個實現批量抓取淘女郎寫真圖片的爬蟲爬蟲
- 58同城 反爬蟲機制及處理爬蟲
- python爬蟲之處理驗證碼Python爬蟲
- C# 爬蟲—-Cookies處理(Set-Cookie)C#爬蟲Cookie
- 用Python爬蟲抓取代理IPPython爬蟲
- 爬蟲抓取網頁的詳細流程爬蟲網頁
- Python爬蟲 搜尋並下載圖片Python爬蟲
- Python爬蟲小專案:爬一個圖書網站Python爬蟲網站
- Python爬蟲: 抓取One網頁上的每日一話和圖Python爬蟲網頁
- 如何處理識別出的網路爬蟲爬蟲
- Scrapy之"並行"爬蟲並行爬蟲
- Python爬蟲抓取技術的門道Python爬蟲
- 爬蟲技術抓取網站資料方法爬蟲網站
- python爬蟲之抓取小說(逆天邪神)Python爬蟲
- Python爬蟲使用代理proxy抓取網頁Python爬蟲網頁
- wget 網頁爬蟲,網頁抓取工具wget網頁爬蟲
- python爬蟲-抓取騰訊招聘資訊頁面Python爬蟲
- python爬蟲學習:爬蟲QQ說說並生成詞雲圖,回憶滿滿Python爬蟲
- python爬蟲學習(3)-抓取廖雪峰python教程並製作成PDF文件Python爬蟲