本文纯粹用于技术练习,请勿用作非法途径

 import re
import urllib.request
from bs4 import BeautifulSoup
import time url=input("第一页网址:") def gethtml(url):
#获取页面源代码html
page=urllib.request.urlopen(url)
html=page.read().decode('utf-8') #html是一个列表
soup=BeautifulSoup(html,'html.parser') return soup def getbookurl(soup): #获取该页所有书本的链接地址
try: firsturl2=[]
bookurl=soup.find_all("h4")
bookurl1=re.findall(r'<h4><a data-bid=".*?" data-eid=".*?" href="(.*?)" target="_blank"',str(bookurl))
#print(bookurl1)
for i in range(0,len(bookurl1)):
bookurl="http:"+bookurl1[i] soup1=gethtml(bookurl) #获取每本书第一章 的url
time.sleep(0.2)
firsturl=soup1.find_all("a",{"class":"red-btn J-getJumpUrl "})
firsturl1=re.findall(r'data-firstchapterjumpurl=".*?" href="(.*?)" id="readBtn">',str(firsturl))
if firsturl1[0]=='': #由于起点限制,某些链接无法爬取,显示的是一个空列表,这里要进行判断
continue
firsturl2.append(firsturl1[0])
print(firsturl2)
return firsturl2
except:
return firsturl2 def getcontent(soup,load): content=soup.find_all("div",{"class":"read-content j_readContent"}) content1=re.compile(r'<p>([\s\S]*?)</p>') content2=content1.findall(str(content)) content3=re.sub("</?\w+[^>]*>",'',content2[0]) content4=content3.replace('。','。\n\n\0\0\0') #到此,将章节内容获取完毕 contentname=re.compile(r'<h3 class="j_chapterName">(.*?)</h3>') contentname1=contentname.findall(str(soup)) #获取章节名称 book="----------------------------------------------------------------"+contentname1[0]+"------------------------------------------------------------\n\n\n"+content4 with open(load, 'a',encoding='gb18030') as f: #这里的gb18030是GBK的父集,所以能兼容GBK不能编码的字符。 f.write(book) def nextcontent(soup): content=soup.find_all("div",{"class":"chapter-control dib-wrap"}) #print(str(content)) step=re.compile(r'<a data-eid="qd_R109" href="(.*?)" id="j_chapterNext">') content1=step.findall(str(content)) if content1 == []: step1=re.compile(r'<a data-eid="qd_R118" href="(.*?)" id="j_chapterNext">') content2=step1.findall(str(content)) url="http:"+content2[0] return url
else:
url="http:"+content1[0] return url def panduan(soup): content=soup.find_all("div",{"class":"chapter-control dib-wrap"}) #print(str(content)) step=re.compile(r'<a data-eid="qd_R109" href="(.*?)" id="j_chapterNext">') content1=step.findall(str(content)) return content1
#------------------------------------------------------------------------- #------------------------------------------------------------------------- while 1==1:
soup2=gethtml(url)
firsturl2=getbookurl(soup2) for j in range(0,len(firsturl2)):
url="http:"+firsturl2[j]
soup1=gethtml("http:"+firsturl2[j])
bookname=re.findall(r'<h1>(.*?)</h1>' ,str(soup1))
load="d:/88/%s.txt" % bookname[0]
i=0
while 1==1:
soup=gethtml(url)
getcontent(soup,load)
url=nextcontent(soup)
content1=panduan(soup)
i+=1
print("第%d章下载完成" % i) if content1 == []:
break time.sleep(0.2)
print("-------------第%d本书下载完成---------" % int(j+1))

结果图:

学习ing!!!  加油

python 爬取qidian某一页全部小说的更多相关文章

  1. Python 爬取大众点评 50 页数据,最好吃的成都火锅竟是它!

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 胡萝卜酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

  2. python爬取豆瓣电影第一页数据and使用with open() as读写文件

    # _*_ coding : utf-8 _*_ # @Time : 2021/11/2 9:58 # @Author : 秋泊酱 # @File : 获取豆瓣电影第一页 # @Project : 爬 ...

  3. 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接

    [学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...

  4. Python爬取豆瓣指定书籍的短评

    Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...

  5. Python 爬取 猫眼 top100 电影例子

    一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...

  6. 萌新学习Python爬取B站弹幕+R语言分词demo说明

    代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...

  7. python 爬取王者荣耀高清壁纸

    代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...

  8. python爬取博客圆首页文章链接+标题

    新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...

  9. 爬虫实战(三) 用Python爬取拉勾网

    目录 0.前言 1.初始化 2.爬取数据 3.保存数据 4.数据可视化 5.大功告成 0.前言 最近,博主面临着选方向的困难(唉,选择困难症患者 >﹏<),所以希望了解一下目前不同岗位的就 ...

随机推荐

  1. OpenGL教程和书籍

    1.http://goanna.cs.rmit.edu.au/~gl/teaching/Interactive3D/

  2. day3_字符串常用方法

    s.upper()s.lower()s.capitalize()s.split(',')s.strip('abc')s.lstrip()s.rstrip()s.replace('old','new') ...

  3. (4.2)mysql备份还原——备份概述

    1.什么情况下会用到备份呢? [1.1]灾难恢复 [1.2]单位审计:数据库在过去某一个点是什么样的 [1.3]跨机房灾备:异地备份 [1.4]认为的DDL或者DML语句,导致主从库的数据消失 [1. ...

  4. MySQL中的数据类型以及完整性约束

    数据类型 数据库mysql中也是分很多数据类型的,最常用的就是:数字类型.字符类型.日期类型.枚举与集合类型 一.数字类型: 默认都是有符号的,即正负号,若想无符号,在创建表时加unsigned.指定 ...

  5. HAProxy基础原理介绍

    HAProxy的功能概述 反向代理 1. mode http,https: 七层反向代理(仅支持http,https七层协议) 2. mode  tcp:         (伪)四层反向代理 调度器 ...

  6. python文件的md5加密方法

    本文实例讲述了python文件的md5加密方法.分享给大家供大家参考,具体如下: 一.简单模式: from hashlib import md5 def md5_file(name): m = md5 ...

  7. javascript篇-typeof,instanceof,constructor,toString判断数据类型的用法和区别

    javascript基本数据类型有:string,number,Boolean,undefined,null 引用类型(复杂类型):object, ES6中新增了一种数据类型:Symbol 以上数据类 ...

  8. MySQL深入理解

    [存储引擎] InnoDB表引擎 默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀. 数据存储在共享表空间,可以通过配置分开. 对主键查询的性能高于其他类型的存储引擎. 内部做了很多优化,从磁盘读 ...

  9. php合并数组并保留键值的方法

    答案:使用 + 连接两个数组,替换array_merge()函数. php合并数组,一般会使用array_merge方法. array_merge — 合并一个或多个数组 array array_me ...

  10. Photoshop去图片水印——适用复杂图片上有水印

    该方法适合复杂图片上有水印的,不过这个只适合水印只是文字而没有背景的那种.不是所有的水印图片都适合处理.下面是处理前后的对照   工具/原料   photoshop8.0 方法/步骤   1 打开需要 ...