python是一门优秀的计算机编程语言,两年前曾因为动过自动化交易的念头而关注过它。前几天在微信上点了个python教学的广告,听了两堂课,所以现在又热心了起来,照葫芦画瓢写了一段简单的网络爬虫代码,感受了一番python的强大,和需要的朋友们分享一下。提醒注意的是,由于版权的原因,网络爬虫一定要注意道德和法律的风险,千万不要去做违法的事情,本代码仅用于交流和学习,不得用于商业谋利。为了版面简洁一些,逐条的注释放在文未了。

python开发环境的安装以及标准库的部署自己百度一下,哥也是一枚小小白,我们遇到的问题可能不一样,所以也指导不了你,反正网上有很多前辈大佬们的经验可以参考,聪明的你肯定能搞定!废话不多说,先把以下的代码抄写下来:

import requests,sys

from bs4 import BeautifulSoup

import time

import socket

以上源代码不解释,多抄几遍就知道了,呵呵呵……然后打开目标网页(本博文纯属交流学习,这个网页是随便找的一个不出名的小说站。),分析一下结构,这个需要有点HTML基础,实在不懂网上随便找个教程看看就行,看图:

我们现在要做的是把这篇名为《大主宰》的网络小说爬下来存储为一个TXT的文本,放到移动设备上阅读,当然我们可以一篇篇的打开复制粘贴,一千多章,呵呵,想想就脑壳疼。其实,python就是代替这种重复机械性工作的好工具。

用谷歌的Chrome,或者遨游浏览器什么的都可以,只要不是IE,按F12键打开如图所示的开发者模式,第一个红色框里是小说的名字,这个我们会用到。第二个红色框里是该小说章节列表,它被放在一个

里,各章节的内容链接置于表格组合标签

target="https://xxxxxx.xxx/xxx/2788.html"

print('页面抓取中……')

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

mypath='D:\\TXT小说\\'

bookserver='https://www.xxx.xxx'

html=requests.get(target,headers=headers)

time.sleep(1)

html.encoding="GBK"

texts=BeautifulSoup(html.text,'lxml')

bookname=texts.find('h1').get_text()

booklinks=texts.find('div',class_='zjbox').find('dl',class_='zjlist').find_all('a')

booknum=len(booklinks)'

print('开始下载小说:《'+bookname+'》,共有 '+str(booknum)+' 章节。')'

上面的python网页爬虫源代码爬取了小说的名字,知道了有多少章节,以及每一章节的链接地址,下面用循环开始一章章的爬取小说内容,然后继续抄代码:

i=0

with open(mypath+bookname+'.txt','a+',encoding='GBK') as ok:

ok.write(bookname+'\n=====================================\n')

ok.close()

接下来是最主要的代码,爬取每一章节的内容页面,把小说内容抓下来,存入TXT文件。源代码和上面类似的地方我就不再一一注释了,另外,因为python有严格的缩进格式,以此来区分逻辑结构,但网页排版是可能会出现一些小的差异,直接复制的朋友注意修正。继续抄代码:

for zjlink in booklinks:

html2=requests.get(bookserver+zjlink['href'],headers=headers)

time.sleep(2)

html2.encoding='GBK'

texts2=BeautifulSoup(html2.text,'lxml')

mytext=texts2.find('div',id='content')

mytext=mytext.text.replace('\xa0'*4,'\n')

mytext=mytext.replace('\n\n','\n')

mytext=mytext.replace('X小说网 WWW.XX,最快更新'+bookname+'最新章节!','')

with open(mypath+bookname+'.txt','a+', encoding='GBK') as ok:

ok.write('-----------------------\n'+zjlink.string+'\n--------------------')

try:

ok.writelines(mytext)

ok.write('\n')

i+=1

sys.stdout.write("已下载:%.2f%%" % float(i/booknum*100) + '\r')

sys.stdout.flush()

#print(bookname+':'+zjlink.string+'下载完成!')

except:

ok.writelines(zjlink.string+'下载失败!')

ok.write('\n')

i+=1

sys.stdout.write("已下载:%.2f%%" % float(i/booknum*100) + '\r')

sys.stdout.flush()

print(bookname+':'+zjlink.string+'下载失败!XXXXXXXXXXX')

print('-------------------\n'+bookname+'下载完成!\n-----------------')

#注释:定义目标页面网址。

#注释:输出页面开始抓取的提示。

#注释:编造一个假的浏览器头部,欺骗目标网站,让它以为这是一个真实的访问。

#注释:该小说站的域名。

#注释:你下载小说的存储目录。

#注释:访问小说《大主宰》的目录页面,把其内容加载给变量html。

#注释:休息一秒钟,第一,给点时间加载内容,第二,不间断的访问容易被反爬。

#注释:设置编码为GBK中文,这个一般以源网页为准。

#注释:按LXML规则编译网页内容并存入变量texts。

#注释:从texts里找第一个

标签,并获取里面的内容,这个就是小说的名字了。

#注释:从texts里找第一个

,再找第一个链接,存入数组booklinks。

#注释:获取这个数组的个数,也即该小说有多少章节。

#注释:输出。

#注释:定义一个变量,用于下面的循环计数。

#注释:在你的存储目录下生成一个以小说名命名的TXT文件,以追加方式写入,编码GBK。

#注释:在TXT文本里写入小说的名字,换行再写一排等号分割,再换行。

#注释:先关闭这个TXT文件。

#注释:我们之前把小说章节的所有链接地址存入了booklinks这个变量里,现在我把这些链接一个一个地取出来,每取出一个就打开一个,打开一个就爬取该章节的内容,追加存入TXT里,zjlink['href']就是小说章节的链接地址。

#注释:休息两秒钟,指定编码,获取页面。

#注释:mytext=texts2.find('div',id='content')这句与上边一样,就是从章节内容也里面看小说内容是放在哪个容器里的。

#注释:mytext=mytext.text.replace('\xa0'*4,'\n')把连续的四个空格转换为一个换行符。下边两句也是一样的功能,就是把内容页面一些特殊的东西转化一下,比如删除一些与内容无关的广告词等等,使之在TXT里正常显示。

#注释:打开TXT文件,一章章地写入,爬完一章,换行,显示爬取进度。

#注释:因为一些特殊原因,比如非GBK编码等导致写入失败,显示下载失败,跳过错误继续爬取下一章,全部章节爬取完成后输出成功提示。

终于弄完了,好累,一句句的注释,都是为了照顾白生生的朋友们啊,排版也很丑,下次的python源代码直接上了,有看不明白的朋友留言吧,我再解释。

python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...相关推荐

  1. python爬取小说写入txt_零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版...

    百度贴吧的爬虫制作和糗百的爬虫制作原理基本相同,都是通过查看源码扣出关键数据,然后将其存储到本地txt文件. 项目内容: 用Python写的百度贴吧的网络爬虫. 使用方法: 新建一个BugBaidu. ...

  2. 第100篇博客——用Python爬取我前99篇博客内容,分词并生成词云图

    这是我的第100篇博客,从2016年7月1日发表第一篇博客至今,也有两个多年头了. 回首自己前99篇博客,各种类型都有,有技术总结,有随感,有读书笔记,也有BUG修改.内容千奇百怪,质量参差不齐,篇幅 ...

  3. Python爬取韩寒全部新浪博客

    接上一篇,我们根据第一页的链接爬取了第一页的博客,我们不难发现,每一页的链接就只有一处不同(页码序号),我们只要在上一篇的代码外面加一个循环,这样就可以爬取所有博客分页的博文,也就是所有博文了. # ...

  4. python基础教程:Python如何基于selenium实现自动登录博客园

    这篇文章主要介绍了Python如何基于selenium实现自动登录博客园,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需要做的准备: 本文章是使用 ...

  5. 第一篇CSDN博客 python爬虫豆瓣排名前250的电影

    ## 第一篇CSDN博客 python爬虫豆瓣排名前250的电影 1.首先,这是本宝宝的第一篇博客,嘿嘿,有点小激动,之所以采用CSDN发博客呢有两个原因,1是因为现在学的东西比较多,自己学着学着就忘 ...

  6. 分享制作精良的知识管理系统 配置SQL Server文档数据库 完美实现博客文章的的下载,存储和浏览...

    前一篇文章<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>已经提到如何使用Site Rebuild来下载您所喜欢的博客文章,但是还不能实现把下载的文件导入进数据库中, ...

  7. HTML5期末大作业:个人网站设计——个人旅游图片博客HTML5模板(7个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业下载

    HTML5期末大作业:个人网站设计--个人旅游图片博客HTML5模板(7个页面) HTML+CSS+JavaScript 学生网页课程设计期末作业下载 临近期末, 你还在为HTML网页设计结课作业,老 ...

  8. python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...

    原标题:对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力 以前挺爱在笔趣阁看小说的(老白嫖怪了) 现在学了一点爬虫技术,就自然而然的想到了爬取笔趣阁的小说 也算锻炼一下自己的技术,就以新笔 ...

  9. 利用爬虫将Yuan先生的博客文章爬取下来

    由于一次巧遇,我阅读了Yuan先生的一篇博客文章,感觉从Yuan先生得博客学到很多东西,很喜欢他得文章.于是我就关注了他,并且想出自他手笔得博客文章,无奈,可能Yuan先生不想公开自己得博客吧,在他的 ...

最新文章

  1. Matlab与线性代数--广义逆矩阵
  2. 两年的等待,近700页干货,同系列累计销量25万+,第三版内容更扎实
  3. 洛谷—— P1869 愚蠢的组合数
  4. python操作RabbitMQ
  5. LeetCode题组:第914题-卡牌分组
  6. mysql 子表 关联查询语句_mysql查询语句 和 多表关联查询 以及 子查询
  7. SAP CRM Fiori应用Simulation pipeline的刷新问题
  8. 中移4G模块-ML302-OpenCpu开发-(固件编译和烧录)
  9. Unity2020.1新功能探路:光照相关更新
  10. Mac os 10.15配置Java14和Eclipse环境
  11. 努力≠上进!那些持续精进的人有多可怕?
  12. Vue解决接口访问跨域问题
  13. php学生成绩管理系统完整源代码,PHP学生成绩管理系统
  14. 解决iText生成pdf文件过大的问题
  15. VLIW Microprocessor Hardware Design
  16. 知识星球问答精选(附五一赠书活动)
  17. 已知IP地址和子网掩码后可以算出网络地址、广播地址、地址范围、主机位数、可用主机位数
  18. Qt实现半透明、无边框、可自由移动、不规则的窗体
  19. PBOC/EMV 中SDA和DDA简介
  20. 《乌合之众》中的50金句

热门文章

  1. 职场中如何发挥自己的长处和优势
  2. 音频呼叫界面设计_使用网络音频来增强您的用户界面
  3. 转几个12306各家所言 之一
  4. 组态王虚拟服务器,组态王客户端服务器是什么
  5. python label 边框_Python Tkinter LabelFrame标签框架
  6. Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置
  7. 小学计算机网络教室上机制度,网络教室上机登记制度
  8. win10安装chocolatey及使用
  9. 2018.7.17 绍兴一中模拟赛 解题报告
  10. 所有的事情都会趋于平淡