手机写python爬虫_我用手机写了一个Python爬虫,爬下了《凡人修仙传》……
前言
↓
舞劍很喜歡閱讀網絡小說。
凡人修仙傳,知北游,無限恐怖……等等,優秀的網絡小說很多,為此,我在三年前創辦了一個推書公眾號@無夢解書荒。
專門用來推薦我覺得好看的網絡小說。
小說爬蟲
起因
老書蟲一般有兩個煩心事,第一,不知道看什么。第二,不知道去哪看。
第一個,可以去找推書公眾號,以及各大榜單掃榜。
第二個,就沒那么容易了。
翻開百度一搜,廣告橫行,彈窗關都關不完,閱讀體驗差的一批。
這時候,我們可以用 Python 爬蟲,將小說從網頁端爬取下來,整理成 TXT 文本,導入喜歡的閱讀APP觀看。
準備
舞劍前面介紹了兩款 Python 集成開發環境,分別是 QPython 和? Pydroid 。
這一次,就用 Pydroid 來爬取小說。
獲得 Pydroid * 1
Python 爬蟲,必須要觀看源碼,從源碼中尋找需要的資源與文本。可以直接用 Python 扒源碼,我這里建議用網頁源碼查看器,簡單直觀。
獲得 Alook瀏覽器 * 1
開始
1. 獲取小說地址
①我這里準備爬取凡人流小說《凡人修仙傳》
②隨機選取網址:
m.9txs.com/book/61781.html
2. 分析源碼地址
①? 首先爬取第一章《山邊小村》的文本內容,點進去第一章,可以發現網址鏈接后綴改變了。
m.9txs.com/book/61781/868469.html
多出了 /868469.html。
②? 用Milk瀏覽器打開網址,運行腳本,可以查看源碼。
3. 爬取首頁 TXT 文本
① 爬取整頁源碼。
舞劍這里準備使用 requests 庫,大家記得安裝好。
首先自定義方法 get_one _page(),用來爬取源碼并返回給 main()? 方法。
接下來,在? main()? 函數中輸出源代碼。
代碼如下:
import requests
#獲取首頁源碼
def get_one_page( url ):
response = requests.get( url )
return response.text
def main():
url = 'http://m.9txs.com/book/61781/868469.html'
html = get_one_page( url )
print( html )
main()
②解析頁面,篩選內容。
首先,來看看正文部分究竟在源碼的哪里。
嗯,在 div id=“main”>……中間。
章節標題在 h1 class=“headline”>
正文內容在 div class=“content”>
至于作者與書名,我們暫時不需要。
③編寫代碼,提取內容
這里準備使用 lxml 庫來爬取正文,沒安裝的小伙伴記得先安裝,很方便的。
首先,導入 lxml 庫的 etree 模塊。
然后,使用 etree 的 HTML() 方法來初始化源碼。
最后,使用xpath語法來抽取我們需要的內容。
這里,新建一個方法 parse_one _page() 用來爬取資源。
代碼如下:
#解析源碼,提取正文
def parse_one_page( html ):
html = etree.HTML( html )
#標題
title = html.xpath('//div[@id="main"]/h1/text()')
#正文
content = html.xpath('//div[@id="main"]/div[@class="content"]//text()')
print( title )
print( content )
需要的內容為 title(標題) 和 content(正文)。
這里的代碼輸出后,會得到兩個數組,分別記錄著標題和正文的內容。
內容如下所示:
[‘第1章 山邊小村’]
[’\n\t’, ‘二愣子睜大著雙眼,直直望著茅草和爛泥糊成的黑屋頂,身上蓋 著的舊棉被,已呈深黃色,看不出原來的本來面目,還若有若無的散發著淡 淡的霉味。’, ‘\n’, ‘在他身邊緊挨著的另一人,是二哥韓鑄,酣睡的十分 香甜,從他身上不時傳來輕重不一的陣陣打呼聲。’, ‘\n’, ‘離床大約半丈 遠的地方,是一堵黃泥糊成的……’, ‘……’, ‘\n\t’]
可以看到,這兩個數組的確是我們需要的內容。
那么,就剩下最終的一步,將 爬取的小說標題和正文保存到 TXT 文本中。
寫入文檔,保存為TXT||4
保存為 TXT 文本很簡單,只需要使用 Python 自帶的文件系統就可以了。
這里先新建一個方法 write_txt(), 用來保存 TXT文本。
接著使用內置方法,創建 txt 文件 凡人修仙傳.txt,設置參數為 a+,表示可以追加內容,最后使用 **write()**方法寫入即可。
代碼如下所示:
#保存TXT文本
def write_txt( result ):
with open( '/sdcard/凡人修仙傳.txt', 'a+' ) as f:
f.write( result )
接下來,就是在 main() 方法中調用 **write_txt()**方法就行了,但這里有兩個問題:
① parse_one _page()方法返回的是列表(list),不能直接寫入到 TXT 文本中。
②列表正文(content)中,除了小說正文外,還包含了 “\n \t” 這些符號,必須要去除后再寫入 txt文檔,才不會影響閱讀體驗。
取出標題
我們先取出 title(標題)中的內容, title 中只有一個內容,所以只需要使用下標為0的中括號就能取出,代碼如下所示:
write_txt( title[0] )
取出正文
接著要取出 content(正文)中的內容, content 內部包含了換行符(\n)和制表符(\t),它們散落在每一段文字的開頭與結尾,這里直接使用 join() 方法,用 \n 將內容連接為 str(字符串)。
代碼如下所示:
write_txt( '\n'.join(content) )
最終會在手機根目錄生成 凡人修仙傳.txt 文本,打開后可以看到爬取的內容一切正常。
后記
就這樣,用 Python 爬蟲爬下了凡人修仙傳第一章的內容,是不是很簡單。
至于其他章節的內容,留在下一節繼續寫。
另外,源碼很簡單,總共也就30行,如果有需要的小伙伴,記得關注我,后臺回復:爬蟲01,獲取本次的代碼。
關于 Pydroid ,可以去翻翻我以前的文章,也可以后臺直接回復:0003, 免費領取。
文中用到的 Alook,嫌麻煩的小伙伴可以用其他的 via 等瀏覽器取代,只要可以查看源碼就行。
當然,也可以后臺回復:0008,或者直接回復: Alook, 即可免費獲取。
總結
以上是生活随笔為你收集整理的手机写python爬虫_我用手机写了一个Python爬虫,爬下了《凡人修仙传》……的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰勒公式和等价无穷小
- 下一篇: 曾经遇到的线上问题