大家好,今天給大家帶來Python爬蟲的簡易制作,很适合新手練手。
爬蟲即是利用程式模仿真實使用者浏覽網頁并記錄目标内容,進而可避過網站的廣告,以擷取較好的閱讀體驗。
本次以辰東大神的新書《聖墟》為例,向大家展示一下爬蟲。歡迎大家批評指正。
需要用到的工具:
python3.x
pycharm
思路:
1.擷取頁面源代碼
2.擷取章節連結
3.擷取章節網頁源代碼
4.擷取正文
5.下載下傳至本地
具體步驟及代碼如下:
一.擷取頁面源代碼:
1.搜尋聖墟,進入筆趣閣網站,擷取網站位址:https://www.biqiuge.com/book/4772/,按F12進入網頁源碼界面。
2.打開pycharm,建立Python檔案,導入requests等庫,并利用requests庫中的get函數擷取頁面源碼,具體代碼如下:
import urllib.request
import re
import requests
def download_novel():
url = 'https://www.biqiuge.com/book/4772/'
html = requests.get(url)#擷取頁面源碼
html_content = html.content#以二進制編碼讀出頁面源碼
html_content = html_content.decode('gbk')#指定編碼(可在網頁源碼中搜尋charset擷取網頁編碼)
二.擷取章節連結
1.現在已經擷取網頁的全部内容了,下一步就是篩選出我們想要的資訊,即各個章節連結。
可以看出各個章節前後的H5标簽是相同的,由此可以利用正規表達式對其進行處理。大家可以看下廖雪峰老師對正規表達式的講解,很透徹、詳細。在此不作過多解釋。正規表達式
實作代碼如下:
reg = r'<dd><a href ="/book/4772/(.*?)">(.*?)</a></dd>'#篩選章節連結
urls = re.findall(reg,html_content)#清單:章節連結
這時需要注意:《聖墟》現在還是連載狀态,是以在章節前有六章新更新的章節,這些章節我們也讀取了,是以要對其進行處理。當時第一思路是想利用正規表達式不讀取前面那幾章,但由于網頁的設計等原因,不是太易于實作。然後猛然想到,章節連結是讀取到清單中的,何不直接删除那幾個元素呢?而且代碼實作也超級簡單。于是我采取了這種方式,成功地剔除了重複的章節。
三.擷取章節網頁源代碼
具體操作跟上一步類似。
四.擷取正文
爬出正文網頁後,同樣利用正規表達式篩選出正文。(需要注意筆趣閣這個網站,網站編碼不太規範,在正文最後到标簽的最後幾個空格,數量是不一樣的,因為我們采用的是精确比對,是以爬取一章後,後面就出現錯誤了,這個浪費了我很長時間。最後我把空格也利用正則中(.*?)的特性,把空格也讀取了下來)具體代碼如下:
for url in urls:
novel_url: Union[str, Any]='https://www.biqiuge.com' + url[0]#正文位址
novel_title=url[1]#章節名稱
chapt = requests.get(novel_url)#位址所有内容
tempt = chapt.content
chapt_html = tempt.decode('gbk')#指定編碼
reg=r'class="showtxt">(.*?)https:'#讀取正文
chapt_content = re.findall(reg,chapt_html)#正規表達式篩選後
然後需要對讀取的資料進行清洗,去掉H5的标簽。
五.下載下傳至本地
最後一步就是下載下傳正文至本地的txt檔案中了。代碼如下:
print('正在下載下傳 %s'%novel_title)#在螢幕顯示下載下傳的章節
f = open('聖墟.txt','a')#建立或打開檔案以讀寫
f.write(novel_title+chapt_content)#寫入
f.close()#關閉檔案
注意:以上代碼隻是Python爬蟲的一個簡單思路,還不能用于實戰,隻能下載下傳前幾章,然後IP就會被網站封禁。因為網站的風控技術可以檢測到是非真實使用者通路的。
下一篇給大家帶來如何騙過網站的風控技術,模仿真實使用者通路網站。後附源碼,歡迎大家批評指正。
爬蟲源碼