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