python爬取小說

2021-10-13 14:15:03 字數 3142 閱讀 2994

為了摸魚方便,今天自己寫了個爬取某閣**的程式,嘿嘿~[斜眼笑]。好吧,其實就是找個目的學習python,分享一下。

老規矩,首先定義coding以及引入包。

# -*- coding:utf-8 -*-

from selenium import webdriver

from pynput.keyboard import key,listener

接下來獲取資料鏈結。

def

get_links

(url)

:"""

這裡是學習青燈教育課程後收穫的知識,這裡致謝一下!

"""brower = webdriver.firefox(executable_path =

r'./geckodriver.exe'

) brower.get(url)

infos = brower.find_element_by_id(

'list'

) links = infos.find_elements_by_css_selector(

'dl>dd>a'

) urllists =

for link in links:

urls = link.get_attribute(

'href'))

)# urls.split() 刪除鏈結前後的空格

return urllists

這裡是將所有章節的鏈結都儲存起來了,也可以不用儲存,我是為了測試方便。

個人建議哈,儲存資料是乙個很好的習慣,大不了用完刪了,不要需要的時候發現沒有了還得重新獲取,不值當。

獲取到鏈結之後把章節內容拿出來。

def

get_concent

(url)

:# 不知道怎麼回事,每次訪問網頁都需要重新定義引擎,有大佬能給我解釋下原因嗎?

brower = webdriver.firefox(executable_path =

r'./geckodriver.exe'

) brower.get(url)

lines = brower.find_element_by_id(

"content"

).text.split(

)return lines

其實到這裡就已經基本實現爬取**內容了,但咱們的目的是啥?摸魚呀,那肯定得把鍵盤操作加進來呀,結果,還真有。

class

control()

:"""

邂逅模擬卷,2020.python 在控制台中獲取鍵盤按鍵,例如上下左右. url:[ ]

"""def__init__

(self)

: self.dir_ =

none

# dir一定要用成員變數,不然沒辦法在on_press中修改

defgetdir

(self)

: self.dir_ =

none

# 如果是不是左右則返回none,主要是我沒建立上下的作用,其實也可以通用定義每次輸出的行數把上下加進來,不過沒必要感覺

defon_press

(key)

:if key == key.up:self.dir_ =

none

elif key == key.down:self.dir_ =

none

elif key == key.left:self.dir_ =-1

elif key == key.right:self.dir_ =

1elif key == key.esc:self.dir_ =

none

return

false

listener = listener(on_press=on_press)

# 建立***

listener.start(

)# 開始監聽,每次獲取乙個鍵

print

("press left and right to turn the page, or esc to quit the read model!"

) listener.join(

)# 加入執行緒

""" 感謝下莫煩python,看了他多執行緒的課程才搞懂這是個什麼玩意。

"""listener.stop(

)# 結束監聽,沒有這句也行,直接隨函式終止

return self.dir_

這個函式挺有用的,可以通過key.()來修改鍵盤輸入的函式,我也是今天才知道的。畢竟平時工作都是資料分析,這個就沒用過。每日乙個小進步任務達成~~

進入閱讀模式。

def

read_model

(section =0)

:"""

:section = 0 定義起始章節

"""import time

_ =none

while

true

: concent = get_concent(urlslist[section][0

])time.sleep(1)

# 設定休眠,避免頻繁重新整理導致ip被限制

for lines in concent:

print

("\t"

,lines,end =

"\n"

) _ = control(

).getdir(

)if _ !=

none

: section = section + _

else

:break

最後,呼叫main程序,實現摸魚。

if __name__ ==

"__main__"

:# url = "" 不知道是不是這裡,版權總是審核不通過。

urlslist = get_links(url)

read_model(

75)

至於那些儲存到文字啊,open函式和write函式啥的,想來可是接觸爬蟲的人,應該都不會生疏吧。

Python爬取小說

感覺這個夠蛋疼的,因為你如果正常寫的話,前幾次執行沒問題,之後你連 都沒改,再執行就出錯了。其實這可能是網路請求失敗,或者有反爬蟲的東西吧。但這就會讓你寫的時候非常苦惱,所以這這東西,健壯性及其重要!import requests from bs4 import beautifulsoup impo...

python 爬取小說

前些天突然想看一些 可能是因為壓力大,所以就要有補償機制吧。為了節省流量,就想著把內容爬下來,然後就可以在路上看了。於是有了下面的指令碼。usr bin env python coding utf 8 import requests from lxml import etree 為了解決unicod...

python爬取小說

一 準備 安裝 requests pyquery庫 二 使用 定義了search類 初始化時傳入 第一章url 和 名即可 再呼叫all content方法即可 coding utf8 import re import requests from requests.exceptions import...