< -- 星星之火,可以燎原 -- >
首  页Python 电脑应用股票操盘经典收藏摄影学习网站设计学习资料杂感随笔留言本
热门话题:人生股票故事操盘系统生活燎原股市投资古典阿零经典
当前到访用户:天涯游客        
25
python爬取网络小说存储为TXT的网页爬虫源代码实例
2019-11
作者:阿零 | 来源:本站原创 | 分类:Python | 阅读:1164 次 | 评论:0 条

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

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

import requests,sys
from bs4 import BeautifulSoup
import time
import socket

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

python网页爬虫目标页面截图

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

用谷歌的Chrome,或者遨游浏览器什么的都可以,只要不是IE,按F12键打开如图所示的开发者模式,第一个红色框里是小说的名字,这个我们会用到。第二个红色框里是该小说章节列表,它被放在一个<div class="zjbox">里,各章节的内容链接置于表格组合标签<dl class="zjlist">里。认真看一下图例,然后继续抄代码:

python网页爬虫目标页面结构分析截图

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"


python网页爬虫目标页面编码

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


python网页爬虫运行界面截图

#注释:定义目标页面网址。
#注释:输出页面开始抓取的提示。
#注释:编造一个假的浏览器头部,欺骗目标网站,让它以为这是一个真实的访问。
#注释:该小说站的域名。
#注释:你下载小说的存储目录。
#注释:访问小说《大主宰》的目录页面,把其内容加载给变量html。
#注释:休息一秒钟,第一,给点时间加载内容,第二,不间断的访问容易被反爬。
#注释:设置编码为GBK中文,这个一般以源网页为准。
#注释:按LXML规则编译网页内容并存入变量texts。
#注释:从texts里找第一个<h1>标签,并获取里面的内容,这个就是小说的名字了。
#注释:从texts里找第一个<div class="zjbox">,再找第一个<dl class="zjlist">,再从<dl class="zjlist">里边找所有的<a>链接,存入数组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源代码直接上了,有看不明白的朋友留言吧,我再解释。

python网页爬虫爬取的TXT小说截图

本文为【燎原博客】的原创文章,由阿零于【302天前】发表在【Python 】分类下,您可以对其【发表评论】,或者引用(转载)到您的个人博客或网站,但必须保留文章的出处、链接地址以及作者等相关信息。
【文章标题】:python爬取网络小说存储为TXT的网页爬虫源代码实例
【链接地址】:http://aoeboke.com/archives/1911251836.html
【文章标签】:python 网页爬虫 源代码 实例 
本文还没有评论,赶快去抢个沙发吧!
昵称:*
邮箱:*
网站:
验证:看不清?点一下 *
本站公告
欢迎各位朋友的到来,【燎原博客】是博主自己编写网站源码设计制作的个人博客,如果您在浏览中发现有不足的地方或者有什么建议,衷心希望能反馈给我,谢谢!
淘宝客
阅读排行
按月归档
网友评论
文章标签
最新发表
博客统计
文章总数:304 篇
评论总数:122 条
留言总数:23 条
注册会员:17 人
本周更新:0 篇
网站运行:2699 天
最后更新:2020/6/18 15:46
【燎原博客】部分内容来源于网络,版权归原作者所有,如有冒犯实属无意,请及时联系告之,博主在此先行向您致歉,并将在第一时间进行删改。
本站是博主自己设计制作并编写网站程序源码,主要记录个人生活、网站设计、学习电脑及网络应用知识,并介绍一些特色软件和股票指标公式的个人博客类网站。
Designed and Powered by zhlinpb CopyRight © 2013 燎原  All Rights Reserved  滇ICP备13002614号