使用Python抓取评书网站的小说评书

听评书这种东西真的是上瘾!开始只是上下班路上听,后来在单位上班,也习惯带着耳机听,这样可以屏蔽掉外界的干扰,干活的效率相对要高一些。

最近更是上瘾了,听一个小说,用的是app在线听的,但是现在的app啥都想要开一个VIP,简直了。。。穷人呢总有自己的路子,于是我就想着自己电脑下载好,然后在传到手机里。这里就要说一下现在的评书网站,有的也是需要vip,有的就是乱七八糟的投各种垃圾广告,只能说体验极差。

回想两年前也是做过类似的是,当时就是用一个Excel文件,手动找到规律,然后依赖Excel的编辑填充功能去实现一些网址的整理,然后再统一建立迅雷批量任务下载。但是这个方法在现在已经行不通了。现在的网站的下载放盗链手段还是比较多的,需要网页的交互,链接也有时间限制,原来的方法显然已经行不通了。于是只有另辟蹊径了。

这里我就把眼光放到了Python上了,虽然我个人会的语言是cpp,但是太笨重了,做这种不太合适,虽然我确信可以实现,但是没必要。期间也咨询请教了好几个大牛,但是可能是我语文表达能力不行,大牛只表示了爱莫能助,所以我只能自己动手,丰衣足食了。首先我们先看看迅雷下载界面(这个后加的25是因为脚本运行过程中我在忙别的事,热点切入到了脚本调用的浏览器中,误操作导致漏了一回,后来手动给补上)

这些都很容易实现,我一个没用过Python的几个小时的百度成本加分析成本就写了一个小脚本模板,已经可以正常解析一个网站的链接了。

from selenium import webdriver
from time import sleep
from win32com.client import Dispatch

chrome_driver = 'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
driver = webdriver.Chrome(executable_path= chrome_driver)
driver.implicitly_wait(5)
file1 = open('links.txt', 'a')

#替换这里
l = range(43521,43563)
serialName = "G:\\迅雷下载\\评书\\白鹿原"
####
for x in l:
driver.get(url="http://www.pingshu8.com/down_%s.html" %x)
titliename = driver.title
driver.find_element_by_id('clickina').click()
sleep(2)
allHandles = driver.window_handles;
driver.switch_to.window(allHandles[len(allHandles)-1])
print(allHandles)
print(titliename)
addstr = driver.current_url
thunder = Dispatch('ThunderAgent.Agent.1')
thunder.AddTask(addstr, titliename, serialName)
thunder.CommitTasks()
print(addstr)
file1.write(addstr)
file1.write('n')
m = range(1, len(allHandles) - 1)

for y in m:
print(allHandles[y])
driver.switch_to.window(allHandles[y])
sleep(2)
driver.close()
driver.switch_to.window(allHandles[0])
print("close")
file1.close

懂的人自然懂了,不懂的就交vip挺好。感兴趣的可以搭一个Python开发环境,把上面的一段复制上去看看运行的结果是什么样的,这里还有几个小技巧我没有明确点出来,但是都应该是能百度到真确的答案的。说实话,百度真的挺好的,不但能找到合适的答案,还练就了我一双火眼金睛。谷歌不行,一般第一条就是你想要的,其他的都索然无味,好无趣。

我是用eclipse开发的,以前没有用过。我是说eclipse和Python都没有用过。开发的界面如下:

运行起来以后是这样,注意会提示:“Chrome 正受到自动测试软件的控制”

《使用Python抓取评书网站的小说评书》上的一个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据