上班想摸魚?為了摸魚方便,今天自己寫了個爬取筆閣小說的程式,好吧,其實就是找個目的學習python,分享一下,
1. 首先匯入相關的模塊
import os
import requests
from bs4 import BeautifulSoup
2. 向網站發送請求并獲取網站資料

網站鏈接最后的一位數字為一本書的id值,一個數字對應一本小說,我們以id為1的小說為示例,
進入到網站之后,我們發現有一個章節串列,那么我們首先完成對小說串列名稱的抓取
# 宣告請求頭
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'
}
# 創建保存小說文本的檔案夾
if not os.path.exists('./小說'):
os.mkdir('./小說/')
# 訪問網站并獲取頁面資料
response = requests.get('http://www.biquw.com/book/1/').text
print(response)

寫到這個地方同學們可能會發現了一個問題,當我去正常訪問網站的時候為什么回傳回來的資料是亂碼呢?
這是因為頁面html的編碼格式與我們python訪問并拿到資料的解碼格式不一致導致的,python默認的解碼方式為utf-8,但是頁面編碼可能是GBK或者是GB2312等,所以我們需要讓python代碼很具頁面的解碼方式自動變化
#### 重新撰寫訪問代碼
```python
response = requests.get('http://www.biquw.com/book/1/')
response.encoding = response.apparent_encoding
print(response.text)
'''
這種方式回傳的中文資料才是正確的
'''
3. 拿到頁面資料之后對資料進行提取
當大家通過正確的解碼方式拿到頁面資料之后,接下來需要完成靜態頁面分析了,我們需要從整個網頁資料中拿到我們想要的資料(章節串列資料)
- 首先打開瀏覽器
- 按F12調出開發者工具
- 選中元素選擇器
- 在頁面中選中我們想要的資料并定位元素
- 觀察資料所存在的元素標簽

'''
根據上圖所示,資料是保存在a標簽當中的,a的父標簽為li,li的父標簽為ul標簽,ul標簽之上為div標簽,所以如果想要獲取整個頁面的小說章節資料,那么需要先獲取div標簽,并且div標簽中包含了class屬性,我們可以通過class屬性獲取指定的div標簽,詳情看代碼~
'''
# lxml: html決議庫 將html代碼轉成python物件,python可以對html代碼進行控制
soup = BeautifulSoup(response.text, 'lxml')
book_list = soup.find('div', class_='book_list').find_all('a')
# soup物件獲取批量資料后回傳的是一個串列,我們可以對串列進行迭代提取
for book in book_list:
book_name = book.text
# 獲取到串列資料之后,需要獲取文章詳情頁的鏈接,鏈接在a標簽的href屬性中
book_url = book['href']
4. 獲取到小說詳情頁鏈接之后進行詳情頁二次訪問并獲取文章資料
book_info_html = requests.get('http://www.biquw.com/book/1/' + book_url, headers=headers)
book_info_html.encoding = book_info_html.apparent_encoding
soup = BeautifulSoup(book_info_html.text, 'lxml')
5. 對小說詳情頁進行靜態頁面分析

info = soup.find('div', id='htmlContent')
print(info.text)
6. 資料下載
with open('./小說/' + book_name + '.txt', 'a', encoding='utf-8') as f:
f.write(info.text)
最后讓我們看一下代碼效果吧~

抓取的資料



文章正文到這里已經結束了,只是想感謝一些閱讀我文章的人,
我退休后一直在學習如何寫文章,說實在的,每次我在后臺看到一些讀者的回應就會覺得很欣慰,于是我想把我收藏的一些編程干貨貢獻給大家,回饋每一個讀者,希望能幫到你們,
干貨主要有:
① 2000多本Python電子書(主流和經典的書籍應該都有了)
② Python標準庫資料(最全中文版)
③ 專案原始碼(四五十個有趣且經典的練手專案及原始碼)
④ Python基礎入門視頻等等(適合小白學習)
*如果你用得到的話可以直接拿走,在我的QQ技術交流群里(廣告勿入)可以自助拿走,群號是980758007,*

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/279690.html
標籤:python
上一篇:Python聊天室(帶界面)主要實作技術:tkinter,Mysql,Treading,socket。功能:可私聊群聊,查看聊天記錄
