python爬取奇书网小说
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-8
from bs4 import BeautifulSoup
import urllib
import re
import 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 urllist
urllists=getLasturl()
num=1
for 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+htdeephtml = getSoup(str(lasturl))val =deephtml.find_all("a", 'downButton')#【图1】,代码下边补print "val len:"+str(len(val))if len(val)<3:continuetry: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=webusexcept:print "this hive a Error"continueelse:if ".etxt" in webut:#避免第二个例子deurl=webut.replace(".etxt",".txt")elif ".txt" in webut:deurl=webutfilename = "D:\\nov\\%s.txt" % (booktype+"\\"+bookname.decode("utf-8"))#拼接保存后的小说的目录和名字print filenametry:urllib.urlretrieve(deurl.encode('gb2312'), filename)#下载小说至D盘nov目录下的书本分类中except:print "urlretrieve hive a Error"continueprint numnum += 1print "--------------------------------"
书籍作者:果的战斗】,切分去真正的作者名字if writer in webus:#//如果作者名字在这个链接中webut=webus.replace(writer,bookname)#第三个例子,如果【txt】下载进入的地址中的书名是作者名字,就替换为之前进入书本链接时的书名else:webut=webusexcept:print "this hive a Error"continueelse:if ".etxt" in webut:#避免第二个例子deurl=webut.replace(".etxt",".txt")elif ".txt" in webut:deurl=webutfilename = "D:\\nov\\%s.txt" % (booktype+"\\"+bookname.decode("utf-8"))#拼接保存后的小说的目录和名字print filenametry:urllib.urlretrieve(deurl.encode('gb2312'), filename)#下载小说至D盘nov目录下的书本分类中except:print "urlretrieve hive a Error"continueprint numnum += 1print "--------------------------------"
图1:
图2:
待优化:
1、try
2、多线程
python爬取奇书网小说相关推荐
- Python爬取全书网小说全文——正则表达式的应用
1. 引言 各位读者新年好,今天给大家带来的案例是爬取全书网小说全文,主要用到了正则表达式.我们知道,正则表达式一般用来进行格式化的精确匹配,用来爬取多文本的内容非常方便.本次采用面向过程的方法,理解 ...
- 【Python】手把手教你用Python爬取某网小说数据,并进行可视化分析
网络文学是以互联网为展示平台和传播媒介,借助相关互联网手段来表现文学作品及含有一部分文字作品的网络技术产品,在当前成为一种新兴的文学现象,并快速兴起,各种网络小说也是层出不穷,今天我们使用seleni ...
- python爬取全书网小说
做一个爬取小说的爬虫,使用 requests 和 bs4 具体代码如下 # _*_ utf-8 _*_ import requests import random from bs4 import Be ...
- Python 爬取起点的小说(非vip)
Python 爬取起点的小说(非vip) 起点小说网是一个小说种类比较全面的网站,当然,作为收费类网站,VIP类的小说也很多,章节是VIP的话,有一个动态加载,也就 ...
- Python爬取书包网文章实战总结
python爬取书包网文章总结 今天闲来无事去看小说,但是发现没办法直接下载,所以呢就用python爬虫来下载一波了,哈哈- 爬取的是这篇小说:剑破九天(是不是很霸气,话不多说,开始-) 总体思路步骤 ...
- 爬取奇书网书籍信息并存入自动生成的xls表中(完善版)
# -*- coding: utf-8 -*- __author__ = '木之易' __date__ = '2018/8/10 9:08' import re from random import ...
- 爬取奇书网书籍信息并存储在自动生成的slsx表中(正则初级)
# -*- coding: utf-8 -*- __author__ = '木之易' __date__ = '2018/8/9 9:34'import re from urllib import re ...
- scrapy实现爬取全书网小说到Mysql数据库(附代码)
前言 本篇文章实现python的scrapy框架爬取全书网小说,scrapy框架的安装我在这里就不在赘述了,建议window用户使用anaconda安装,这里比较省心一些.运行环境python3(实际 ...
- python爬取东方财富网资金流向数据(在本地生成csv文件)
今天我们来试着用python爬取东方财富网资金流向的表格数据. 第一步:程序及应用的准备 首先我们需要安装selenium库,使用命令pip install selenium;然后我们需要下载对应的c ...
- 利用python爬取东方财富网股吧评论并进行情感分析(一)
利用python爬取东方财富网股吧评论(一) python-东方财富网贴吧文本数据爬取 分享一下写论文时爬数据用到的代码,有什么问题或者改善的建议的话小伙伴们一起评论区讨论.涉及内容在前人的研究基础之 ...
最新文章
- pthread_join直接决定资源是否能够及时释放
- 论文解读 | 基于正则化图神经网络的脑电情绪识别
- 第一百二十六期:代码以外的生存之道,献给每位入了坑的码农
- idea警告Cannot resolve MVC View
- gogs可以自动化部署吗_效率提升利器:你还害怕自动化部署吗?
- CatBoost的Python与R实现
- 算法:回溯二 生成有效括号对Generate Parentheses
- Codeforces Round #129 (Div. 1)E. Little Elephant and Strings
- java的链表(LinkedList类)
- PDF中动态添加图片和文字
- FFmpeg切割视频,自定义视频ts片段时长
- 一次 Young GC 的优化实践(FinalReference 相关)
- 后台管理系统UI选型推荐
- 查看linux版本是多少位
- Android 编译命令 make j8 21 | tee build.log 解释
- Greenplum—2、操作汇总
- MySQL练习题初级45题(统一表)
- AES-128-CBC加密
- 「经济理财」32堂你能听懂的理财课
- AtCoder Beginner Contest 177 D.Friends
热门文章
- android的otg功能,android怎么打开otg功能
- 冯仑《企业领导最容易犯的十大错误》 .
- Flash:形变动画的制作
- css函数之重复的径向渐变
- git里面的文件怎么删不掉_git如何删除已经提交的文件夹
- Unity Activator反射
- k线顶分型 python_顶分型K线形态形态特征及操作要领
- 【医疗图像分割】Deep neural networks for the detection and segmentation of the retinal fluid in OCT images.
- oracle mysql什么意思_oracle数据库中这些语句都是什么意思啊?
- OpenGL (太阳,地球,月亮 +太阳系八大行星)