没太完善,但是可以爬下整本小说。日后会写入数据库,注释不要太在意,都是调试的。入库估计这周之后,这次爬的是笔趣阁的第1150本书,大家只要可以改get_txt()里数字就行,查到自己要看哪本书一改就可以了!

# coding:utf-8

import requests

import threading

from bs4 import BeautifulSoup

import MySQLdb

import re

import os

import time

import sys

import mysql # 由于爬取的数据太多,我们要把他存入MySQL数据库中,这个库用于连接数据库

import mysql.connector

import logging

# con = mysql.connector.connect(

# user="root",

# password='123456',

# host='localhost',

# port='3306',

# database='test11'

# )

# insertSql = "INSERT INTO spider('id','title','txt_section','section_name','section_name') VALUES (%s,%s,%s,%s,%s)"

# cursor = con.cursor()

req_header = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Cookie': '__cfduid=d577ccecf4016421b5e2375c5b446d74c1499765327; UM_distinctid=15d30fac6beb80-0bdcc291c89c17-9383666-13c680-15d30fac6bfa28; CNZZDATA1261736110=1277741675-1499763139-null%7C1499763139; tanwanhf_9821=1; Hm_lvt_5ee23c2731c7127c7ad800272fdd85ba=1499612614,1499672399,1499761334,1499765328; Hm_lpvt_5ee23c2731c7127c7ad800272fdd85ba=1499765328; tanwanpf_9817=1; bdshare_firstime=1499765328088',

'Host': 'www.qu.la',

'Proxy-Connection': 'keep-alive',

'Referer': 'http://www.qu.la/book/',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'

}

req_url_base = 'http://www.qu.la/book/' # 小说主地址

# 小说下载函数

# txt_id:小说编号

# txt字典项介绍

# id:小说编号

# title:小说题目

# first_page:第一章页面

# txt_section:章节地址

# section_name:章节名称

# section_text:章节正文

# section_ct:章节页数

def get_txt(txt_id):

txt = {}

txt['title'] = ''

txt['id'] = str(txt_id)

try:

# print("请输入需要下载的小说编号:")

# txt['id']=input()

req_url = req_url_base + txt['id'] + '/' # 根据小说编号获取小说URL

print("小说编号:" + txt['id'])

res = requests.get(req_url, params=req_header) # 获取小说目录界面

soups = BeautifulSoup(res.text, "html.parser") # soup转化

# 获取小说题目

txt['title'] = soups.select('#wrapper .box_con #maininfo #info h1')[0].text

txt['author'] = soups.select('#wrapper .box_con #maininfo #info p')

# 获取小说最近更新时间

txt['update'] = txt['author'][2].text

# 获取最近更新章节名称

txt['lately'] = txt['author'][3].text

# 获取小说作者

txt['author'] = txt['author'][0].text

# 获取小说简介

txt['intro'] = soups.select('#wrapper .box_con #maininfo #intro')[0].text.strip()

print("编号:" + '{0:0>8} '.format(txt['id']) + "小说名:《" + txt['title'] + "》 开始下载。")

print("正在寻找第一章页面。。。")

# 获取小说所有章节信息

first_page = soups.select('#wrapper .box_con #list dl dd a')

# 获取小说总章页面数

section_ct = len(first_page)

# 获取小说第一章页面地址

first_page = first_page[0]['href'].split('/')[3]

print("小说章节页数:" + str(section_ct))

print("第一章地址寻找成功:" + first_page)

# 设置现在下载小说章节页面

txt_section = first_page

# 打开小说文件写入小说相关信息

fo = open('{0:0>8}-{1}.txt.download'.format(txt['id'], txt['title']), "ab+")

fo.write((txt['title'] + "\r\n").encode('UTF-8'))

fo.write((txt['author'] + "\r\n").encode('UTF-8'))

fo.write((txt['update'] + "\r\n").encode('UTF-8'))

fo.write((txt['lately'] + "\r\n").encode('UTF-8'))

fo.write(("*******简介*******\r\n").encode('UTF-8'))

fo.write(("\t" + txt['intro'] + "\r\n").encode('UTF-8'))

fo.write(("******************\r\n").encode('UTF-8'))

# 进入循环,写入每章内容

while (1):

try:

# 请求当前章节页面

r = requests.get(req_url + str(txt_section), params=req_header)

# soup转换

soup = BeautifulSoup(r.text, "html.parser")

# 获取章节名称

section_name = soup.select('#wrapper .content_read .box_con .bookname h1')[0]

section_text = soup.select('#wrapper .content_read .box_con #content')[0]

for ss in section_text.select("script"): # 删除无用项

ss.decompose()

# 获取章节文本

section_text = re.sub('\s+', '\r\n\t', section_text.text).strip('\r\n') #

# 获取下一章地址

txt_section = soup.select('#wrapper .content_read .box_con .bottem2 #A3')[0]['href']

# 判断是否最后一章,当为最后一章时,会跳转至目录地址,最后一章则跳出循环

if (txt_section == './'):

print("编号:" + '{0:0>8} '.format(txt['id']) + "小说名:《" + txt['title'] + "》 下载完成")

break

# 以二进制写入章节题目

fo.write(('\r' + section_name.text + '\r\n').encode('UTF-8'))

# 以二进制写入章节内容

fo.write((section_text).encode('UTF-8'))

print(txt['title'] + ' 章节:' + section_name.text + ' 已下载')

# print(section_text.text.encode('UTF-8'))

except:

print("编号:" + '{0:0>8} '.format(txt['id']) + "小说名:《" + txt['title'] + "》 章节下载失败,正在重新下载。")

fo.close()

os.rename('{0:0>8}-{1}.txt.download'.format(txt['id'], txt['title']),

'{0:0>8}-{1}.txt'.format(txt['id'], txt['title']))

# try:

#

# # cursor.execute("INSERT INTO wangzhi VALUES urlVal")

# cursor.execute(insertSql%(id,title,txt_section,section_name,section_name))

#

# con.commit()

# except Exception as err:

#

# print(err)

# # con.rollback()

#

# con.close()

# cursor.close()

except: # 出现错误会将错误信息写入dowload.log文件,同时答应出来

fo_err = open('dowload.log', "ab+")

try:

fo_err.write(('[' + time.strftime('%Y-%m-%d %X', time.localtime()) + "]:编号:" + '{0:0>8} '.format(

txt['id']) + "小说名:《" + txt['title'] + "》 下载失败。\r\n").encode('UTF-8'))

print('[' + time.strftime('%Y-%m-%d %X', time.localtime()) + "]:编号:" + '{0:0>8} '.format(

txt['id']) + "小说名:《" + txt['title'] + "》 下载失败。")

os.rename('{0:0>8}'.format(txt['id']) + '-' + txt['title'] + '.txt.download',

'{0:0>8}'.format(txt['id']) + '-' + txt['title'] + '.txt.error')

except:

fo_err.write(('[' + time.strftime('%Y-%m-%d %X', time.localtime()) + "]:编号:" + '{0:0>8} '.format(

txt['id']) + "下载失败。\r\n").encode('UTF-8'))

print('[' + time.strftime('%Y-%m-%d %X', time.localtime()) + "]:编号:" + '{0:0>8} '.format(

txt['id']) + "下载失败。")

finally: # 关闭文件

fo_err.close()

# 此处为需要下载小说的编号,编号获取方法在上文中已经讲过。

get_txt(1150)

python爬取小说写入txt_用python爬整本小说写入txt文件相关推荐

  1. python爬取天天基金_python多线程+代理池爬取天天基金网、股票数据过程解析

    简介 提到爬虫,大部分人都会想到使用Scrapy工具,但是仅仅停留在会使用的阶段.为了增加对爬虫机制的理解,我们可以手动实现多线程的爬虫过程,同时,引入IP代理池进行基本的反爬操作. 本次使用天天基金 ...

  2. python爬取快手粉丝榜_[Python] 【原创开源】快手爬虫,根据id批量爬取用户的所有图集和视频...

    分享 写在前面代码功能如题,根据快手用户的id来爬取用户所有公开作品,包括图集和视频. 原理:其实就是利用基于chromium内核的浏览器自带的devtools对所有请求进行排查找出包含作品链接的请求 ...

  3. 爬虫爬取学校通知信息(python))

    呦呦鹿鸣 一.爬虫简介 1.1 介绍 1.2 软件配置 二.爬取南阳理工学院ACM题目网站 三.爬取学校官网的信息通知 四.总结 五.参考 一.爬虫简介 1.1 介绍 网络爬虫英文名叫Web Craw ...

  4. python输入数据爬取_python根据用户需求输入想爬取的内容及页数爬取图片方法详解...

    本次小编向大家介绍的是根据用户的需求输入想爬取的内容及页数. 主要步骤: 1.提示用户输入爬取的内容及页码. 2.根据用户输入,获取网址列表. 3.模拟浏览器向服务器发送请求,获取响应. 4.利用xp ...

  5. python爬取歌词生成词云图_爬取毛不易歌词作词云展示

    爬取毛不易歌词作词云展示 今天我们做一个数据可视化的项目,爬取毛不易的歌词做词云展示. 1.爬取数据 我们主要使用 Python 爬虫获取 HTML,用 XPath 对歌曲的 ID.名称进行解析,然后 ...

  6. 【爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩】

    [爬虫+数据可视化毕业设计:英雄联盟数据爬取及可视化分析,python爬虫可视化/数据分析/大数据/大数据屏/数据挖掘/数据爬取,程序开发-哔哩哔哩] https://b23.tv/TIoy6hj

  7. 8个零代码数据爬取工具,不会Python也能轻松爬数!(附教程)

    前天给大家整理了免费数据源网站合集,看大家的反馈很积极,有粉丝留言说,她还想要爬取一些网页的数据进行分析,不知道该如何下手 目前的用的比较多数据爬取方法是用python爬虫,这两年python很火,网 ...

  8. python爬虫教程:Scrapy框架爬取Boss直聘网Python职位信息的源码

    今天小编就为大家分享一篇关于Scrapy框架爬取Boss直聘网Python职位信息的源码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 分析 使用Crawl ...

  9. python爬取软件数据_利用Python爬取爬取APP上面的数据

    前言 在我们在爬取手机APP上面的数据的时候,都会借助Fidder来爬取.今天就教大家如何爬取手机APP上面的数据. 环境配置 1.Fidder的安装和配置 下载Fidder软件地址:https:// ...

  10. 关于爬取吉他堂的吉他谱----Python爬虫

    关于爬取吉他堂的吉他谱----Python爬虫 1. 功能过程的介绍 2.代码介绍 3.源代码 4.运行结果展示 吉他爱好者大多数会在一些吉他谱的网站找自己喜欢的歌曲吉他谱或者自己想学的歌的吉他谱,今 ...

最新文章

  1. html+服务器控件语法,HtmlForm 服务器控件声明性语法
  2. PHP 10条有用的建议
  3. 架构师书单 2nd Edition
  4. 带经纬度的水印相机_这个国庆节,元道经纬相机做交警人员的好帮手
  5. 协同过滤推荐算法的用户向量相似度计算
  6. 主流的虚拟化软件和他们各自的特点
  7. “朝抵抗力最大的路径上走”
  8. 根据UA获取用户访问操作系统、浏览器名
  9. python统计分析书籍_Python数据分析入门书籍推荐
  10. matlab导入数据后画图_简易数据采集分析流程.stm32+python
  11. 陈怡暖:非农克星LMCI数据今晚出炉
  12. 【Android,Kotlin】No type arguments expected for class Call
  13. 形态学重建之孔洞填充
  14. VyOS软路由系统基本设置
  15. 基于jsp+ssm的员工人事工资管理系统
  16. 信息处理工具计算机.ppt,《现代信息处理工具》PPT课件.ppt
  17. 1.1.2半导体二极管的结构、工作原理、参数、伏安特性;
  18. 3065. 巧虎机器人——行走编程模式
  19. 【K8S那些事儿】李华搭建k8s集群一次成功,坑太多都踩完啦
  20. 百度前100个热门搜索词汇算法思路分析

热门文章

  1. phpstorm 配置ftp, 自动更新同步代码 (亲测完美)
  2. 创维G60 显示器参数 创维G60 显示器 评测怎么样
  3. 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)
  4. Linux 内核可用的字符串分割函数 strsep (String Split Function strsep in Linux Kernel)
  5. 树(3)--树和森林
  6. 最小均方误差均衡器的matlab仿真设计,最小均方误差均衡器的Matlab仿真设计
  7. 丽博的超预期广州建博会:年轻多元、智能科技、直播破界
  8. hive 神盾特工局_《神盾局特工》第三季剧终惊人:两位超高人气的角色离开
  9. vb吐槽班09 难得正经一回。。。
  10. 视频监控系统选择硬盘,绿盘、蓝盘、紫盘、黑盘、红盘到底选择哪个?