python 爬取qidian某一页全部小说
本文纯粹用于技术练习,请勿用作非法途径
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某一页全部小说的更多相关文章
- Python 爬取大众点评 50 页数据,最好吃的成都火锅竟是它!
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 胡萝卜酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
- python爬取豆瓣电影第一页数据and使用with open() as读写文件
# _*_ coding : utf-8 _*_ # @Time : 2021/11/2 9:58 # @Author : 秋泊酱 # @File : 获取豆瓣电影第一页 # @Project : 爬 ...
- 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
[学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...
- Python爬取豆瓣指定书籍的短评
Python爬取豆瓣指定书籍的短评 #!/usr/bin/python # coding=utf-8 import re import sys import time import random im ...
- Python 爬取 猫眼 top100 电影例子
一个Python 爬取猫眼top100的小栗子 import json import requests import re from multiprocessing import Pool #//进程 ...
- 萌新学习Python爬取B站弹幕+R语言分词demo说明
代码地址如下:http://www.demodashi.com/demo/11578.html 一.写在前面 之前在简书首页看到了Python爬虫的介绍,于是就想着爬取B站弹幕并绘制词云,因此有了这样 ...
- python 爬取王者荣耀高清壁纸
代码地址如下:http://www.demodashi.com/demo/13104.html 一.前言 打过王者的童鞋一般都会喜欢里边设计出来的英雄吧,特别想把王者荣耀的英雄的高清图片当成电脑桌面 ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- 爬虫实战(三) 用Python爬取拉勾网
目录 0.前言 1.初始化 2.爬取数据 3.保存数据 4.数据可视化 5.大功告成 0.前言 最近,博主面临着选方向的困难(唉,选择困难症患者 >﹏<),所以希望了解一下目前不同岗位的就 ...
随机推荐
- [administrative][CentOS] 新装系统时如何正确精准的选择基础环境和软件包
出于不同的目的,在进行全新CentOS安装的时候,我们到底应该如何作出选择. 是mininal,base server, base web server, 还是啥? 答案在这里: https://ac ...
- Flink – process watermark
WindowOperator.processElement 主要的工作,将当前的element的value加到对应的window中, windowState.setCurrentNamespace(w ...
- js的序列化和反序列化
(1)序列化 即js中的Object转化为字符串 1.使用toJSONString var last=obj.toJSONString(); //将JSON对象转化为JSON字符 2.使用strin ...
- (4.20)sql server中 len 与datalength 的区别
len是任意字符均为一个占位符字节.datalength是根据字符集不同判断占用,如一个中文占用2个字节.
- Python3学习之路~8.2 socket简单实例 实现ssh 发送大量数据
实例1: 利用socket模拟客户端和服务器端各自收发一次数据: #Author:Zheng Na # 客户端 import socket # 声明socket类型,同时生成socket连接对象 cl ...
- sap 类的左侧导航栏
- vi相关
vi有三种模式: 命令模式:键盘的任意输入都当成“编辑命令”: 输入模式:键盘的任意输入都当成文本内容: 末行模式:键盘的任意输入都当成“文本管理命令” 命令模式(刚打开)==>(i,a,o)输 ...
- openshift 容器云从入门到崩溃之二《准备环境》
openshift 从3.9开始就开始支持系统组件在容器里运行了,之前版本都是直接运行在操作系统上,名字也改了叫OKD 目前最新的稳定版本是3.11,所以就安装3.11版本 准备环境: 主机名 系统 ...
- IntelliJ IDEA 配置tomcat 启动项目
1.打开file中setting中搜索Application Servers,如下图 2.添加服务器类型,例如tomcat,如下图,添加完成之后可以选定tomcat的目录,tomcat Home配置t ...
- Linux修改SSH登录端口
Linux的默认登录端口为:22,为系统安全运维都会将端口改成其它端口. 假如我们修改的端口为:3000 1.首先要配置防火墙,允许此端口通行. /sbin/iptables -A INPUT -p ...