為了摸魚方便,今天自己寫了個爬取某閣**的程式,嘿嘿~[斜眼笑]。好吧,其實就是找個目的學習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...