python爬取奇书网小说
来源:互联网 发布:主机名和域名的区别 编辑:程序博客网 时间:2024/05/02 03:17
1、python2.7
2、pycharm
3、奇书网:https://www.qisuu.com/
如上图,导航栏中的分类是包含奇书网的所有图书,打开其中一个分类
如上图,打开奇幻玄幻分类,在这个网页中,每一本书对应的是一本书
如上图,点开书名,进入相应的图书页
如上图,点开【TXT格式下载】会进入这个页面,这个页面也就是书本在奇书网的位置
一开始我以为获取奇书网的所有书本名,只有在把书本名替换【http://dzs.qisuu.com/从骑士到国王.txt】中的书本名就可以获取奇书网的所有书,但是。
想太多了,奇书网的书本放置名是一定遵循这个规则。
举个栗子:比如书本名【营养快线】,它的地址可能会是【http://dzs.qisuu.com/17.txt】
再举个例子:比如【青梅绿茶】,它的地址可能会是【http://dzs.qisuu.com/青梅绿茶.etxt】
再举个例子:比如【青梅绿茶】,他的作者是A,它的地址可能会是【http://dzs.qisuu.com/A.etxt】,但是这个地址打开什么都没有,吧A替换为青梅绿茶,进去,找到了
所以说这个替换的思路是不可行的
只能一个页面一个页面获取。打开首页,获取导航栏中的分类——>进入分类——>进入书本——>进入TXT下载
------------------------------------------------------------------------------------------------------------------------------------------------------
首页:https://www.qisuu.com/
奇幻玄幻分类页面:https://www.qisuu.com/soft/sort01/
武侠仙侠分类页面:https://www.qisuu.com/soft/sort02/
每个书本的页面:https://www.qisuu.com/36774.html
-------------------------------------------------------------------------------------------------------------------------------------------------------
在首页,使用浏览器,谷歌右键,检查【鼠标在分类栏更容易找到】,如下图:
format3 = formatHtml.find_all("div", r'nav')获得这些标签,但是标签中是有【首页】,我们并不需要是首页,可以看到首页的target是_self,而分类是_blank。
l=haf.find_all("a",target=re.compile("_blank")),获取正确的分类,但是我们只需要href字段的内容,l为一个集合,我们可以遍历集合中的每个元素,而这些元素是一个个标签,对于标签我们可以这样取值:
for i in l: Txturl= i["href"] //这个Txturl就是href中的内容【/soft/sort01/】 TXT_TYPE.append(Txturl)//一个集合保存这个数据备用此时,TXT_TYPE这个集合就是所有的分类,首页地址+分类+index.html就是该分类的地址,【index.html】可以不使用,在一个分类中是有很多分页,分类的第一页是没有index.html。但是第二页为:https://www.qisuu.com/soft/sort01/index_2.html,但是我这次是进首页后,获取所有的页面链接,就是不需要在这里进行每个分页的跳转,至进入首页就可以,所有index.html也已不用拼接进入分类中,检查,如下图:黑框中就是所有的小说的链接,任一打开:
黑框中是书本的链接,我们需要获取到这个值,在跟官网链接拼接,就能找到书
p=x.find_all("a"),这一步获取所有a标签,一下时代码,代码中我已添加注释,
#coding:utf-8from bs4 import BeautifulSoupimport urllibimport reimport sys
reload(sys)sys.setdefaultencoding('utf-8')frist_url = "https://www.qisuu.com/"
def getSoup(urlStr): page = urllib.urlopen(urlStr) html = page.read() formatHtmlStr=BeautifulSoup(html) return formatHtmlStr #没有包需要先去安装
def getUrl(): TXT_TYPE = [] formatHtml = getSoup(str(frist_url)) format3 = formatHtml.find_all("div", r'nav') for haf in format3: l=haf.find_all("a",target=re.compile("_blank")) for i in l: Txturl= i["href"] TXT_TYPE.append(Txturl) return TXT_TYPEdef getLasturl(): urllist = [] for type1 in getUrl(): filename=str(type1).split("/")[2] second_url=frist_url+type1+"index.html" formatHtml = getSoup(str(second_url)) pp = formatHtml.find_all("select") for ps in pp: for o in ps: typeurl=o["value"] urllist.append(typeurl+"-"+filename) return urllisturllists=getLasturl()num=1for urlStr in urllists: urls=str(urlStr).split("-")
if urls[1]=="sort01": #为了一会保存书的时候分目录 booktype="奇幻玄幻" elif urls[1]=="sort02": booktype = "武侠仙侠" elif urls[1] == "sort03": booktype = "女频言情" elif urls[1] == "sort04": booktype = "现代都市" elif urls[1] == "sort05": booktype = "历史军事" elif urls[1] == "sort06": booktype = "游戏竞技" elif urls[1] == "sort07": booktype = "科幻灵异" elif urls[1] == "sort08": booktype = "美文同人" elif urls[1] == "sort09": booktype = "剧本教程" elif urls[1] == "sort010": booktype = "名著杂志" newurl=frist_url+urls[0] lasthtml = getSoup(str(newurl)) booklist = lasthtml.find_all("div", 'listBox') for x in booklist: p=x.find_all("a") st="《" for i in p: ht=i["href"] lens=ht.split("/") if len(lens)==2 and st in i.text: bookname = i.text.split("《")[1].split("》")[0].decode("utf-8").replace("/","之")#有些书名中是包含“/”字符,不替换掉保存的时候回出错,/之前或解析成目录 lasturl=frist_url+ht deephtml = getSoup(str(lasturl)) val =deephtml.find_all("a", 'downButton')#【图1】,代码下边补 print "val len:"+str(len(val)) if len(val)<3: continue try: webus=val[1]["href"]#获取标签【图2】,代码下边补 writer = deephtml.find_all("li", 'small')[6].text.split(":")[1]#再次获取标签,在从所有标签的集合中去第七个,获取解释,【书籍作者:果的战斗】,切分去真正的作者名字 if writer in webus:#//如果作者名字在这个链接中 webut=webus.replace(writer,bookname)#第三个例子,如果【txt】下载进入的地址中的书名是作者名字,就替换为之前进入书本链接时的书名 else: webut=webus except: print "this hive a Error" continue else: if ".etxt" in webut:#避免第二个例子 deurl=webut.replace(".etxt",".txt") elif ".txt" in webut: deurl=webut filename = "D:\\nov\\%s.txt" % (booktype+"\\"+bookname.decode("utf-8"))#拼接保存后的小说的目录和名字 print filename try: urllib.urlretrieve(deurl.encode('gb2312'), filename)#下载小说至D盘nov目录下的书本分类中 except: print "urlretrieve hive a Error" continue print num num += 1 print "--------------------------------"
图1:
图2:
待优化:
1、try
2、多线程
- python爬取奇书网小说
- Python爬取小说
- python爬取小说
- Python 爬取小说(诛仙)
- 练:python爬取小说
- python爬取某一小说
- 利用Python爬取妙笔阁小说网的《我是至尊》小说
- python爬取百度贴吧小说
- python爬取百度贴吧小说
- Python requests爬虫爬取小说数据
- 用python爬取豆瓣小说
- Python爬虫——小说爬取
- python 爬取排行榜小说和文本
- python 扒取小说2
- 爬取起点小说
- requests爬取小说
- python爬虫(16)使用scrapy框架爬取顶点小说网
- Python爬虫实例--爬取百度贴吧小说
- 输入文本框内容a标签中的链接自动改变
- 第四章:控制执行流程
- 初学者如何从零学习人工智能?看完你就懂了
- C#网页解析获得HTML中JS变量,一个是浏览器交互(EvaluateScriptAsync),一个是HtmlAgilityPack解析
- QCQP 和 拉格朗日乘子法
- python爬取奇书网小说
- 批量提取文件夹中文件名(C++代码实现)
- IntelliJ idea 2017 卸载
- 用JS获取地址栏参数的方法(超级简单)
- 5网络编程全集
- 奥维奥:阿里、京东都爱说总交易额,这类名词都代表啥意思?
- c#多串口多线程接收数据
- 笔记43 | Android加载器Adapter的深入学习篇(二)
- Docker 操作容器