python为在线漫画网站自制非官方API(未完待续)

接下来将记录我一步一步写一个非官方API的过程,因为一些条件的约束,最后的成品可能很粗暴简陋

现在介绍要准备的所有工具:

系统:ubuntu 14.04

语言:python 2.7

需要自行安装的库:flask,BeautifulSoup4,requests,selenium,pinyin,phantomjs-1.9.8

服务器:Sina App Engine

因为成本原因我选择了Sina App Engine,因为免费,但是免费也带来了一定的麻烦就是功能不全,虽然Sina App Engine允许安装python的第三方库,但是对于javascript解释器我很无奈,如果可以我很希望Sina App Engine有nodejs的运行环境,这样就会方便很多。

当然我写的只是简单实现,并没有考虑到效率和优化

下面是几个重要的文档:

http://beautifulsoup.readthedocs.org/zh_CN/latest/

http://cn.python-requests.org/zh_CN/latest/

http://dormousehole.readthedocs.org/en/latest/

http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html

https://github.com/cleverdeng/pinyin.py

(一定要多看文档,一定要多看文档,一定要多看文档,重要的事要说三遍,因为我经常不看文档)

下面是搜索漫画API开始:

分析:

我选择的网站是:http://cnc.dm5.com(对于网站我只想说非常抱歉)

为什么选择这个网站,因为是我最常逛的在线漫画网站,仅此而已

接下来我们看一下它的搜索页面,当你在首页输入书名,点击搜索以后,URL会跳转

举个例子:

搜索“一拳超人”

结果页面如下:

http://www.dm5.com/search?title=一拳超人&language=1

这样我们就知道搜索结果页面,你可以手动将 一拳超人 改成你喜欢的漫画名,看到会不会跳转到那本漫画的搜索结果页上

但是结果页上内容太多了,并不只有我要的那本漫画,于是我又做了一件事,将中文改成pinyin

http://www.dm5.com/search?title=yiquanchaoren&language=1

结果页面上只有我需要的漫画,现在发现了拼音搜索会更精确

当我们知道这样就可以进入搜索页,那我们就可以分析这个页面,找到我们需要的信息

那么我们需要什么呢?

任何浏览器的F12都是强大的,在这个页面上按下F12,就是新世界的大门,哈哈哈......

定位元素,发现需要的信息是在 class="ssnrk" 中(友情提示,F12下的源码是解析JS以后的,想知道现实情况最后先输出在一个文件上看看)

#coding:utf-8
import requests

wfile = open('url.html','w')
r = requests.get('http://cnc.dm5.com/search?title=yiquanchaoren').content

wfile.write(r)

这是最简单的测试方法,将源码写进一个文件中,然后去文件中找有没有 class="ssnrk" ,如果存在以后就以文件的元素结构分析(以后的每一个页面最好都做一下这步)

现在发现文件中也有这个元素,OK,我们需要什么呢?漫画名和它的地址,当然你要图片也可以

我们发现class="ssnrk"元素下<div class="ssnr_yt"><dl><a href="/manhua-yiquanchaoren/" title="一拳超人"><img height="127" width="95" src="http://mhfm5.tel.cdndm5.com/11/10684/20150430155820_130x174_13.jpg" /></a></dl>里面包含了我们要的一切,名称,链接,图片

那么我们怎么得到这些有效信息呢?

#coding:UTF-8
import urllib2
from bs4 import BeautifulSoup
from bs4 import UnicodeDammit
import requests
import re
import json

#搜索结果页面URL
url='http://cnc.dm5.com/search?title=guanlangaoshou'
r = requests.get(url).content
soup = BeautifulSoup(r)

#找出所有class="ssnr_yt"元素,然后循环找出下面的a元素,放进找一个list中
ssjg_list=[]
for line in soup.find_all(class_="ssnr_yt"):
    ssjg_list.append(line.find('a'))

#循环将所有图片,URL,名称放进字典中
json_ss = {}
j_s=0
for line in ssjg_list:
    soup_a = BeautifulSoup(str(line))
    json_ss['title'+str(j_s)]=soup_a.a.get('title')#找出a元素title属性的值
    json_ss['url'+str(j_s)]=soup_a.a.get('href')#找出a元素hresf属性的值
    json_ss['img'+str(j_s)]=soup_a.a.img.get('src')#找出a元素下img元素src属性的值
    j_s=j_s+1

#以json形式输出
print json.dumps(json_ss,ensure_ascii=False,indent=2)

为什么这里搜索内容变成guanlangaoshou呢?

因为有些漫画真的有多个结果,比如这个guanlangaoshou ,就有四个

为什么URL是完整的,这样怎么具有搜索功能?

现在写的都是小零件和一步一步测试,等到最后会组装起来

目前只走了一小步,还有很多工作要做,不过十点了我要睡觉了,明天继续!(一定要多看文档,一定要多看文档,一定要多看文档,重要的事要说三遍,我吃这亏好几次)

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-07 10:46:33

python为在线漫画网站自制非官方API(未完待续)的相关文章

[daily][optimize] 去吃面 (python类型转换函数引申的性能优化)(未完待续)

前天,20161012,到望京面试.第四个职位,终于进了二面.好么,结果人力安排完了面试时间竟然没有通知我,也没有收到短信邀请.如果没有短信邀请门口的保安大哥是不让我进去大厦的.然后,我在11号接到了面试官直接打来的电话,问我为啥还没到,我说没人通知我我不知道呀.结果我就直接被他邀请去以访客的身份参加面试了.不知道人力的姑娘是不是认识我,且和我有仇,终于可以报复了... 然后,我终于如约到了,面试官带着我去前台登记.前台的妹子更萌...认为我是面试官,面试官是才是来面试的.我气质真的那么合吗?

Python核心编程(第二版) 第二章习题答案 未完待续

2-2.程序输出.阅读下面的Python脚本.#!/usr/bin/env python1 + 2 * 4(a)你认为这段脚本是用来做什么的?(b)你认为这段脚本会输出什么?(c)输入以上代码,并保存为脚本,然后运行它,它所做的与你的预期一样吗?为什么一样/不一样?(d)这段代码单独执行和在交互解释器中执行有何不同?试一下,然后写出结果.(e)如何改进这个脚本,以便它能和你想象的一样工作?答:(a)这段脚本是用来计算表达式的值(b)脚本会输出9(c)保存为脚本,运行后没有输出.和自己预期不一样.

Python的Argparse模块是什么?(未完)

        近日在阅读代码的过程中遇到了Argparse模块,记得前段时间已经看了,可是过了两周现在又忘了, 看来写代码一定要钻研到底搞清楚其中原委才行,本文主要参考Python3.6系列官方文档的Argparse模块的教程. 注意:还有两个模块与Argparse功能相似,getopt和optparse. argparse基于optparse,因此在使用方面非常相似,但是不推荐使用optparse,官方文档更推荐argparse. 1.Argparse的作用 举一个小例子,在Linux系统中

Python之路第一课Day6--随堂笔记(面向对象编程进阶...未完待续 )

本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 一.静态方法 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它

笔记——文档在线阅读的解决方案(未完待续)

目前现在很多大型的网站或是某些项目需要让用户上传的文档可以在线预览.这个目前我所了解到的有以下几种情况: 1.pdf 在线阅读 2.office 在线阅读 对于pdf目前有很多解决方案了,可以参考 http://www.open-open.com/news/view/1fc3e18  ,对于office在线阅读,目前.我的办法是,先转换为PDF,然后使用pdf在线阅读的方式进行浏览.目前好像很多站点都是这么做的. 然而,我在项目中,这类文档在线阅读方案是这样的.OFFICE --> PDF  -

Python学习笔记——基础篇【第一周】(未完待续)

学习Python目的: 1.学完之后,可以做开发运维监控.自动化软件.聊天软件.BBS.博客和网站. 2.投资自己,结识更多的朋友,变更更优秀的人 Python第一周笔记 Python语言介绍 python创始人Guido,荷兰人,Python源自他所挚爱的电视剧Monty Python's Flying Circus.Python编译器使用C语言实现,能够调用C语言库文件.1991年初,Python发布了第一个公开发行版. Python版本: Python1.0   1994年 python2

Python之路第一课Day9--随堂笔记之一(堡垒机实例以及数据库操作)未完待续....

一.堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.c

python 单步调试初探(未完待续)

pdb 调试: import pdb pdb.set_trace() pudb 调试: http://python.jobbole.com/82638/

网站访问优化,未完待续

下午,网站被吐槽了,访问太慢.   最初,我以为是首页的banner图片,太大导致的,之前是500kb的高清图.立即去看了下,banner大图已经压缩到50kb了. so,不是图片的问题. 用Chrome打开网站,禁用缓存,总体访问情况:272个请求,2.68MB,耗时5.56s(load:5.03s,DOMContentLoaded:2.45s) 先找出最大的3个文件:jquery.js 118kb ,服务器本地,而且没有压缩,耗时2.12slayout.css 55.8kb,服务器本地,而且