python 爬取某阁小说
你想要的摸鱼来了
为了摸鱼方便,今天自己写了个爬取某阁小说的程序,嘿嘿~[斜眼笑]。好吧,其实就是找个目的学习python,分享一下。
老规矩,首先定义coding以及引入包。
# -*- coding:utf-8 -*-
from selenium import webdriver
from pynput.keyboard import Key,Listener
接下来获取数据链接。
def get_links(url):
"""
这里是学习青灯教育课程后收获的知识,这里致谢一下!
这里需要下载一个浏览器驱动,笔者使用的是火狐的驱动。
火狐驱动下载可以参考:
等一念, 2019. Firefox 浏览器驱动下载. url: [ https://www.cnblogs.com/nullnullnull/p/11114373.html ]
"""
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')
UrlLists.append(urls.split())# 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:[ https://blog.csdn.net/qq_34451909/article/details/110233820 ]
"""
def __init__(self):
self.dir_ = None # dir一定要用成员变量,不然没办法在on_press中修改
def getdir(self):
self.dir_ = None # 如果是不是左右则返回None,主要是我没创建上下的作用,其实也可以通用定义每次输出的行数把上下加进来,不过没必要感觉
def on_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_ = 1
elif 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 = "http://www.xbiquge.la/56/56564/" 不知道是不是这里,版权总是审核不通过。
urlslist = get_links(url)
read_model(75)
至于那些保存到文本啊,open函数和write函数啥的,想来可是接触爬虫的人,应该都不会生疏吧。