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

zhongguo.png

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

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

import requests,sys

from bs4 import BeautifulSoup

import time

import socket

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

1.png

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

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

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

2.png

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"

3.png

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-----------------')

4.png

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

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

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

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

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

#注释:访问小说《大主宰》的目录页面,把其内容加载给变量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编码等导致写入失败,显示下载失败,跳过错误继续爬取下一章,全部章节爬取完成后输出成功提示。

5.png

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

6.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值