1. 程式人生 > >Python 爬蟲——爬取小說 | 探索白子畫和花千骨的愛恨情仇

Python 爬蟲——爬取小說 | 探索白子畫和花千骨的愛恨情仇

知識就像碎布,記得“縫一縫”,你才能華麗麗地亮相。

1.Beautiful Soup

1.Beautifulsoup 簡介

此次實戰從網上爬取小說,需要使用到Beautiful Soup。
Beautiful Soup為python的第三方庫,可以幫助我們從網頁抓取資料。
它主要有如下特點:

  • 1.Beautiful Soup可以從一個HTML或者XML提取資料,它包含了簡單的處理、遍歷、搜尋文件樹、修改網頁元素等功能。可以通過很簡短地程式碼完成我們地爬蟲程式。
  • 2.Beautiful Soup幾乎不用考慮編碼問題。一般情況下,它可以將輸入文件轉換為unicode編碼,並且以utf-8編碼方式輸出,

2.Beautiful Soup安裝

win命令列下:

Python
1 pip install beautifusoup4

3.Beautiful Soup基礎

大家可以參考文件來學習(中文版的哦):

Python
1 [http://beautifulsoup.readthedocs.io/zh_CN/latest/#id8]

對於本次爬蟲任務,只要瞭解以下幾點基礎內容就可以完成:
1.Beautiful Soup的物件種類:

  • Tag
  • Navigablestring
  • BeautifulSoup
  • Comment

2.遍歷文件樹:find、find_all、find_next和children
3.一點點HTML和CSS知識(沒有也將就,現學就可以)

2.爬取小說花千骨

1.爬蟲思路分析

本次爬取小說的網站為136書屋。

先開啟花千骨小說的目錄頁,是這樣的。

1068837024-599c8e667e5f4_articlex

我們的目的是找到每個目錄對應的url,並且爬取其中地正文內容,然後放在本地檔案中。

2.網頁結構分析

首先,目錄頁左上角有幾個可以提高你此次爬蟲成功後成就感的字眼:暫不提供花千骨txt全集下載。

繼續往下看,發現是最新章節板塊,然後便是全書的所有目錄。我們分析的物件便是全書所有目錄。點開其中一個目錄,我們便可以都看到正文內容。

1068837024-599c8e667e5f4_articlex

按F12開啟審查元素選單。可以看到網頁前端的內容都包含在這裡。

1068837024-599c8e667e5f4_articlex

我們的目的是要找到所有目錄的對應連結地址,爬取每個地址中的文字內容。

有耐心的朋友可以在裡面找到對應的章節目錄內容。有一個簡便方法是點選審查元素中左上角箭頭標誌的按鈕,然後選中相應元素,對應的位置就會加深顯示。

1068837024-599c8e667e5f4_articlex

這樣我們可以看到,每一章的連結地址都是有規則地存放在<li>中。而這些<li>又放在<div id=”book_detail” class=”box1″>中。

1068837024-599c8e667e5f4_articlex

我不停地強調“我們的目的”是要告訴大家,思路很重要。爬蟲不是約pao,矇頭就上不可取。

3.單章節爬蟲

1068837024-599c8e667e5f4_articlex

剛才已經分析過網頁結構。我們可以直接在瀏覽器中開啟對應章節的連結地址,然後將文字內容提取出來。

1068837024-599c8e667e5f4_articlex

我們要爬取的內容全都包含在這個<div>裡面。

程式碼整理如下:

Python
123456789101112131415161718 fromurllibimportrequestfrombs4 importBeautifulSoupif__name__=='__main__':# 第8章的網址url='http://www.136book.com/huaqiangu/ebxeew/'head={}# 使用代理head['User-Agent']='Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'req=request.Request(url,headers=head)response=request.urlopen(req)html=response.read()# 建立request物件soup=BeautifulSoup(html,'lxml')# 找出div中的內容soup_text=soup.find('div',id='content')# 輸出其中的文字print(soup_text.text)

執行結果如下:

1068837024-599c8e667e5f4_articlex

這樣,單章節內容爬取就大功告成了。

4.小說全集爬蟲

單章節爬蟲我們可以直接開啟對應的章節地址解析其中的文字,全集爬蟲我們不可能讓爬蟲程式在每章節網頁內中跑一遍,如此還不如複製、貼上來的快。

我們的思路是先在目錄頁中爬取所有章節的連結地址,然後再爬取每個連結對應的網頁中的文字內容。說來,就是比單章節爬蟲多一次解析過程,需要用到Beautiful Soup遍歷文件樹的內容。

1.解析目錄頁

在思路分析中,我們已經瞭解了目錄頁的結構。所有的內容都放在一個所有的內容都放在一個<div id=”book_detail” class=”box1″>中。

1068837024-599c8e667e5f4_articlex

這兒有兩個一模一樣的<div id=”book_detail” class=”box1″>。

第一個<div>包含著最近更新的章節,第二個<div>包含著全集內容。

請注意,我們要爬取的是第二個<div>中的內容。

程式碼整理如下:

Python
12345678910111213141516171819 fromurllibimportrequestfrombs4 importBeautifulSoupif__name__=='__main__':# 目錄頁url='http://www.136book.com/huaqiangu/'head={}head['User-Agent']='Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'req=request.Request(url,headers=head)response=request.urlopen(req)html=response.read()# 解析目錄頁soup=BeautifulSoup(html,'lxml')# find_next找到第二個<div>soup_texts=soup.find('div',id='book_detail',class_='box1').find_next('div')# 遍歷ol的子節點,打印出章節標題和對應的連結地址forlink insoup_texts.ol.children:iflink!='\n':print(link.text+':  ',link.a.get('href'))

執行結果如圖:

1068837024-599c8e667e5f4_articlex

2.爬取全集內容

將每個解析出來的連結迴圈代入到url中解析出來,並將其中的文字爬取出來,並且寫到本地F:/huaqiangu.txt中。
程式碼整理如下:

Python
12345678910111213141516171819202122232425262728293031 fromurllibimportrequestfrombs4 importBeautifulSoupif__name__=='__main__':url='http://www.136book.com/huaqiangu/'head={}head['User-Agent']='Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166  Safari/535.19'req=request.Request(url,headers=head)response=request.urlopen(req)html=response.read()soup=BeautifulSoup(html,'lxml')soup_texts=soup.find('div',id='book_detail',class_='box1').find_next('div')# 開啟檔案f=open('F:/huaqiangu.txt','w')# 迴圈解析連結地址forlink insoup_texts.ol.children:iflink!='\n':download_url=link.a.get('href')download_req=request.Request(download_url,headers=head)download_response=request.urlopen(download_req)download_html=download_response.read()download_soup=BeautifulSoup(download_html,'lxml')download_soup_texts=download_soup.find('div',id='content')# 抓取其中文字download_soup_texts=download_soup_texts.text# 寫入章節標題f.write(link.text+'\n\n')# 寫入章節內容f.write(download_soup_texts)f.write('\n\n')f.close()

執行結果顯示 [Finished in 32.3s] 。

開啟F盤檢視花千骨檔案。

1068837024-599c8e667e5f4_articlex

爬蟲成功。備好紙巾,快快去感受尊上和小骨的虐戀吧。

5.總結

程式碼還有很多改進的地方。例如文字中包含廣告的js程式碼可以去除,還可以加上爬蟲進度顯示等等。實現這些功能需要包含正則表示式和os模組知識,就不多說了,大家可以繼續完善。

碼字辛苦,碼程式碼費神,文字和程式碼同碼更是艱辛無比。如果您覺得文章有那麼一丟丟價值,請不要吝嗇您的讚賞。

相關推薦

Python 爬蟲——小說 | 探索白子情仇

知識就像碎布,記得“縫一縫”,你才能華麗麗地亮相。 1.Beautiful Soup 1.Beautifulsoup 簡介 此次實戰從網上爬取小說,需要使用到Beautiful Soup。 Beautiful Soup為python的第三方庫,可以幫助我們從網頁抓取資料。

python爬蟲全站url,完美demo(可防止連結到外網等各種強大篩選)

上次完成的url爬取專案並不能滿足需求,在此完成了一個更為強大的爬取程式碼,有需要的可以直接執行,根據自己爬取的網站更改部分正則和形參即可。前排提示:執行需要耐心,因為幾千個url爬完的話,還是建議花生瓜子可樂電影準備好。 話不多說,直接上程式碼,程式碼有註釋,很容易理解。

Python爬蟲-糗事百科段子

hasattr com ima .net header rfi star reason images 閑來無事,學學python爬蟲。 在正式學爬蟲前,簡單學習了下HTML和CSS,了解了網頁的基本結構後,更加快速入門。 1.獲取糗事百科url http://www.qiu

python爬蟲頁面源碼在本頁面展示

一個 nts ring 想要 strip code 空白 列表 ngs python爬蟲在爬取網頁內容時,需要將內容連同內容格式一同爬取過來,然後在自己的web頁面中顯示,自己的web頁面為django框架 首先定義一個變量html,變量值為一段HTML代碼 >&

python 爬蟲 證券之星網站

爬蟲 周末無聊,找點樂子。。。#coding:utf-8 import requests from bs4 import BeautifulSoup import random import time #抓取所需內容 user_agent = ["Mozilla/5.0 (Windows NT 10.0

python爬蟲海量病毒文件

tle format nbsp contex logs request spl tde __name__ 因為工作需要,需要做深度學習識別惡意二進制文件,所以爬一些資源。 # -*- coding: utf-8 -*- import requests import re

Python爬蟲廣州大學教務系統的成績(內網訪問)

enc 用途 css選擇器 狀態 csv文件 表格 area 加密 重要 用Python爬蟲爬取廣州大學教務系統的成績(內網訪問) 在進行爬取前,首先要了解: 1、什麽是CSS選擇器? 每一條css樣式定義由兩部分組成,形式如下: [code] 選擇器{樣式} [/code

python爬蟲——古詩詞

爬蟲 古詩詞 實現目標 1.古詩詞網站爬取唐詩宋詞 2.落地到本地數據庫頁面分析 通過firedebug進行頁面定位: 源碼定位: 根據lxml etree定位div標簽:# 通過 lxml進行頁面分析 response = etree.HTML(data

利用Python爬蟲淘寶商品做數據挖掘分析實戰篇,超詳細教程

實戰 趨勢 fat sts AI top 名稱 2萬 安裝模塊 項目內容 本案例選擇>> 商品類目:沙發; 數量:共100頁 4400個商品; 篩選條件:天貓、銷量從高到低、價格500元以上。 項目目的 1. 對商品標題進行文本分析 詞雲可視化 2.

Python爬蟲 - 百度html代碼前200行

http src mage bsp bubuko str 百度 爬蟲 圖片 Python爬蟲 - 爬取百度html代碼前200行 - 改進版, 增加了對字符串的.strip()處理 Python爬蟲 - 爬取百度html代碼前200行

簡易python爬蟲boss直聘職位,並寫入excel

python爬蟲寫入excel1,默認城市是杭州,代碼如下#! -*-coding:utf-8 -*-from urllib import request, parsefrom bs4 import BeautifulSoupimport datetimeimport xlwt starttime = dat

Python 爬蟲微信文章

微信爬蟲 爬取微信文章 爬取公眾號文章搜狗微信平臺為入口 地址:http://weixin.sogou.com/ --------------------------------------------------------------搜索關鍵詞“科技”對比網址變化情況查看網址http://wei

python爬蟲QQ說說並且生成詞雲圖,回憶滿滿!

運維開發 網絡 分析 matplot 容易 jieba 編程語言 提示框 然而 Python(發音:英[?pa?θ?n],美[?pa?θɑ:n]),是一種面向對象、直譯式電腦編程語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且

Python爬蟲OA幸運飛艇平臺獲取數據

sta 獲取數據 status fail attrs color wrapper 排行榜 req 安裝BeautifulSoup以及requests 打開window 的cmd窗口輸入命令pip install requests 執行安裝,等待他安裝完成就可以了 Beaut

利用python爬蟲圖片並且制作馬賽克拼圖

python爬蟲 splay ise 做事 c-c sea mage item -a   想在妹子生日送妹子一張用零食(或者食物類好看的圖片)拼成的馬賽克拼圖,因此探索了一番= =。   首先需要一個軟件來制作馬賽克拼圖,這裏使用Foto-Mosaik-Edda(網上也有在

Python - 爬蟲登陸github

用API搜尋GitHub中star數最多的前十個庫,並用post方法登陸並點選收藏 一 用API搜尋GitHub中star數最多的前十個庫 利用GitHub提供的API爬取前十個star數量最多的Python庫     GitHub提供了很多專門為爬蟲準

Python爬蟲豆瓣電影、讀書Top250並排序

更新:已更新豆瓣電影Top250的指令碼及網站 概述 經常用豆瓣讀書的童鞋應該知道,豆瓣Top250用的是綜合排序,除使用者評分之外還考慮了很多比如是否暢銷、點選量等等,這也就導致了一些近年來評分不高的暢銷書在這個排行榜上高高在上遠比一些經典名著排名還高,於是在這裡打算重新給To

Python爬蟲小說名著

週末閒來無事,本來想看一看書的,結果也沒看進去(RNG輸的我真是糟心。。。) 於是就用python寫了一個爬蟲,來爬取小說來看,防止下次還要去網上找書看。 我們先找一個看名著的小說網 我們開啟http://www.mingzhuxiaoshuo.com/ 名著小說網來,首先看到

Python爬蟲 - 網頁文字資訊並儲存(美文的與儲存)

 本篇文章所包含的主要內容:  使用requests模組實現對網頁以字串的形式儲存 使用open()、write()、close()函式實現檔案的開啟與寫入 使用if() 條件語句對所需要的文字資訊進行過濾以形成一個專用提取函式 &n

python爬蟲代理ip

  最近想玩玩代理IP的刷東西怎麼實現的,所以來試試(生計所迫) 這個是西刺免費代理IP http://www.xicidaili.com/ 不能保證都能用,所以爬取下來需要檢驗,用爬取的代理ip訪問網站,看狀態碼,是200就證明能用 儲存到MongoDB