猫史档案馆


[我叫以赏]Python获取笔趣阁文章

用户:我叫以赏我叫以赏查看:3 回复:3 评论:3 创建时间:2020-04-01T14:21:44


个人博客文章地址:http://blog.zhangyishang.top/get-post-1.html

(由于长度限制文章建议前去博客查看!请见谅!)

前言 本文章没有恰饭,只是提供制作思路

一个同学要我下载笔趣阁的文章,我便同意了,一言既出,驷马难追。我用我网站搭建了一个“设备见外”平台(类似与盗版笔趣阁),就可以做到在线搜索笔趣阁文章、在线浏览目录与阅读,而且十分简洁没有广告,

那我我就使用Python从0开始搭建吧,(注意:UP一边写文章一边写程序,工作量很大,一步一个操作)

界面

先写一个简单的交互式页面,

# -*- coding:utf-8 -*-
 
# 导入使用到的模块
import requests
import gzip
import os
 
 
def search():
    pass
 
 
def tip(Text):
    os.system('cls')
    print("\n状态:" + Text + "\n")
    print(
"""------------------------------------
    欢迎使用Python笔趣阁采集软件
       软件由 @我叫以赏 制作
     主要用于下载笔趣阁的小说
         程序仅供学习使用
Web:http://blog.zhangyishang.top
------------------------------------
"""
    )
 
 
 
if __name__ == '__main__':
    safeexit = False
    tip("准备就绪!等待用户输入!")
    while True:
        try:
            user = input('[1.搜索器 2.目录查看 3.文章查看 4.采集工具 5(exit).退出程序]请输入您要使用的功能代号:')
            user = user.lower()
            if user == "1":
                pass
            elif user == "2":
                pass
            elif user == "3":
               pass
            elif user == "4":
                pass
            elif user == "exit" or user == "5":
                safeexit = True
                exit(0)
 
            else:
                tip("未输入任何操作!如果您想要退出请输入 5 或 exit ,或者点击右上角的 × !")
        except:
            if safeexit == False:
                user = input("程序遭到意外关闭!程序检测并且已经拦截!部分代码已暂停运行,正在处理的程序很可能已经遭到关闭,是否继续?[Y(1)/N(2)] :")
                user = user.lower()
                if user == 'y' or user == "1":
                    continue
                else:
                    exit(0)
            else:
                exit(0)
搜索器

接下来我们要制作搜索器,搜索书的内容,首先打开笔趣阁,找到搜索页面,随意输入关键字,并进行抓包

所以我们先写一个引导用户输入,之后将输入内容进行POST地址获得网页!

def search():
    tip('已打开搜索文章工具,等待用户输入......')
    user = input("请问您想要搜索什么呢?请输入搜索的内容:")
    try:
        data = {
            'searchkey':user
        }
        page = requests.post('http://www.xbiquge.la/modules/article/waps.php',data)
        print(page.text)
    except:
        pass
    pass

先测试一下,发现输出文本乱码,将

print(page.text) 改成 print(page.content.decode('utf-8'))

即可。

下面为输出数据部分:

看来是表格,我们要获取两个数据,一个是网站,另一个就是名称,

通过分析我决定,先寻找

<td class="even"><a href="

然后再寻找 " target="_blank" rel="noopener noreferrer" 以此重复,我们只需要书面,不需要下面的最新章节,通过while循环判断是否没有了。用text.find()函数,最后找不到了就返回-1,我们只要判断是否为-1就好了。

def search():
    tip('已打开搜索文章工具,等待用户输入......')
    user = input("请问您想要搜索什么呢?请输入搜索的内容:")
    try:
        data = {
            'searchkey':user
        }
        page = requests.post('http://www.xbiquge.la/modules/article/waps.php',data)
        Textpage = page.content.decode('utf-8')
        position = 0
        while position != -1 and position != len('&lt;td class="even"&gt;&lt;a href="')-1:
            position = Textpage.find('&lt;td class="even"&gt;&lt;a href="',position) + len('&lt;td class="even"&gt;&lt;a href="')
            nameposition = Textpage.find('" target="_blank"&gt;',position)
            if (position != -1 and position != len('&lt;td class="even"&gt;&lt;a href="')-1) == True:
                href = (Textpage[position:nameposition])
                nameposition = nameposition +  len('" target="_blank"&gt;')
                end = Textpage.find('&lt;/a&gt;',nameposition)
                name = Textpage[nameposition:end]
                print(href,name)
    except:
        pass
    pass

由于position被加上的26个字符串的长度,所以也要判断是否为不等于25。

搜索“我的世界”打印出来的结果:

接下来我们把地址全部放入列表中,方便操作。完善搜索器操作:

global book
book = []
 
def print_book():
    global book
    a = 0
    tip('共有 %d 搜索结果!输出中......' % (len(book)))
    for x in book:
        a = a + 1
        print("[%d]%s" % (a, x[1]))
 
 
 
def search():
    global book
    tip('已打开搜索文章工具,等待用户输入......')
    user = input("[#print打印出之前搜索结果 #exit返回主菜单]请问您想要搜索什么呢?请输入搜索的内容(此操作将会清空之前的搜索的内容):")
    user = user.lower()
    user = user.喵()
 
    if user == '#print':
        print_book()
        search()
        return
    elif user == '#exit':
        return
    elif user == '':
        tip('您隔着原地输入?')
        search()
        return
    try:
        data = {
            'searchkey': user
        }
        page = requests.post('http://www.xbiquge.la/modules/article/waps.php', data)
        Textpage = page.content.decode('utf-8')
        position = 0
        book = []
        tip('正在搜索图书......')
        while position != -1 and position != len('&lt;td class="even"&gt;&lt;a href="') - 1:
            position = Textpage.find('&lt;td class="even"&gt;&lt;a href="', position) + len('&lt;td class="even"&gt;&lt;a href="')
            nameposition = Textpage.find('" target="_blank"&gt;', position)
            if (position != -1 and position != len('&lt;td class="even"&gt;&lt;a href="') - 1) == True:
                href = (Textpage[position:nameposition])
                nameposition = nameposition + len('" target="_blank"&gt;')
                end = Textpage.find('&lt;/a&gt;', nameposition)
                name = Textpage[nameposition:end]
                book.append((href, name))
                tip('共有 %d 搜索结果!' % (len(book)))
        print_book()
 
    except BaseException as error:
        tip('搜索失败,原因:'+str(error))
        search()

输出结果:

 


回复

上一页1 页 / 共 1下一页
我叫以赏我叫以赏

目录查看

接下来我们完善目录查看,

入口点:

                while True:
                    user = input('输入图书编号,若按错了请输入 #exit 返回,图书编号输入 #print 查看,如果没有编号,请返回至 搜索器 搜索!输入编号(也可以是您找到的网址,此操作会使上传获取的目录结果清空):')
                    user = user.lower()
                    user = user.喵()
                    if user == '#exit':
                        break
                    elif user == '#print':
                        print_book()
                        continue
                    else:
                        try:
                    
      dir(user)
                        except:
                            tip('出现错误!可能是输入不正确!')
                            input('回车键继续[Enter]')
                        break 
def dir(id):
    global book
    try:
        id = int(id)
    except: # 输入网址
        if id.find('http') == -1:
            tip('不是合适网址或id!')
            return
 
    else: # 输入数字
        id = id -1
        if id &gt; len(book) or id &lt; 0:
            tip('id无效!')
            input('回车键继续[Enter]')
            return
        Page = requests.get('http://www.xbiquge.la/36/36339/')
        PageText = Page.content.decode('utf-8')
        print(PageText) 

 

点赞0


评论


我叫以赏我叫以赏

还有一半发不出去大家去我的博客看吧!直接复制粘贴到地址栏,如果是手机用户请删除复制文字中的图片!http://blog.zhangyishang.top/get-post-1.html

点赞0


评论


無一郎無一郎

emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞emotion_编程猫_点赞

点赞0


评论