码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-05 09:43:42      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:python   selenium   beautifulsoup   requests   phantomjs   

接下来将记录我一步一步写一个非官方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://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是完整的,这样怎么具有搜索功能?
现在写的都是小零件和一步一步测试,等到最后会组装起来

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





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

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

标签:python   selenium   beautifulsoup   requests   phantomjs   

原文地址:http://blog.csdn.net/u013055678/article/details/46756909

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!