python爬取三国演义的所有章节储存到本地文件中

 #爬取三国演义的全部章节                                    
  2 
  3 import urllib
  4 import urllib.request
  5 import urllib.parse
  6 from lxml import etree
  7 from urllib import error
  8 import lxml.html
  9 import os
 10 import time
 11 import requests
 12 #小说站点的URL
 13 novel_base_url = "https://www.biqukan.com"
 14 #获取小说的URL
 15 novel_url = urllib.parse.urljoin(novel_base_url,"/50_50096/    ")
 16 #每章小说的链接
 17 chapter_url_list = []
 18 #请求头
 19 headers = {"Host":"www.biqukan.com",
 20            "Referer":"https://www.biqukan.com",
 21            "User-Agent":"Mozilla/5.0 (X11; Ubuntu; Linux x8    6_64; rv:80.0) Gecko/20100101 Firefox/80.0"
 22         }
 23 
 24 #获取章节链接列表
 25 def fetch_chapter_urls():
 26     req = urllib.request.Request(url = novel_url,headers =     headers)
 27     html = lxml.html.parse(urllib.request.urlopen(req))
 28     hrefs = html.xpath("//dd/a/@href")
 29     print(hrefs)
 30 
 31     #过滤前面的最新章节列表和无用章节
 32     for href in hrefs[16:]:
 33         chapter_url_list.append(urllib.parse.urljoin(novel_    base_url,href))
 34     print(chapter_url_list)
 35 #小说的保存文件夹
novel_save_dir = os.path.join(os.getcwd(),"novel_cache/")
 37 #解析每个页面获得章节正文
 38 def parsing_chapter(url):
 39     req = urllib.request.Request(url = url,headers = header    s)
 40     html = lxml.html.parse(urllib.request.urlopen(req))
 41     title = html.xpath("//h1/text()")[0]
 42     contents = html.xpath("//*[@id='content']/text()")
 43     content = ""
 44     #for循环进行文本的链接
 45     for i in contents:
 46         content += i.strip()#i.strip()移除指定字符串的字符>    (默认空格和换行符)
 47     save_novel(title,content)
 48 #把章节正文写到本地
 49 def save_novel(name,content):
 50     try:
 51         with open(novel_save_dir + name + ".txt","w+") as f    :
 52             f.write(content.strip())
 53     except(error.HTTPError,OSError) as reason:
 54         print(str(reason))
 55     else:
 56         print("下载完成:"+ name)
 57 if __name__ == "__main__":
 58     #判断存储文件是否存在,不存在则重建
 59     if not os.path.exists(novel_save_dir):
 60         os.mkdir(novel_save_dir)
 61     #爬取小说文章链接链表
 62     fetch_chapter_urls()
 63     #遍历抓取所有的小说内容
 64     for chapter in chapter_url_list:
 65         #定时休眠1s防止ip被封
 66         time.sleep(1)
 67         parsing_chapter(chapter)
#爬取的小说章节
'第八回 王司徒巧使连环计 董太师大闹凤仪亭.txt'
'第八十八回 渡泸水再缚番王 识诈降三擒孟获.txt'
'第八十二回 孙权降魏受九锡 先主征吴赏六军.txt'
'第八十回 曹丕废帝篡炎刘 汉王正位续大统.txt'
'第八十九回 武乡侯四番用计 南蛮王五次遭擒.txt'
'第八十六回 难张温秦宓逞天辩 破曹丕徐盛用火攻.txt'
'第八十七回 征南寇丞相大兴师 抗天兵蛮王初受执.txt'
'第八十三回 战猇亭先主得仇人 守江口书生拜大将.txt'
'第八十四回 陆逊营烧七百里 孔明巧布八阵图.txt'
'第八十五回 刘先主遗诏托孤儿 诸葛亮安居平五路.txt'
'第八十一回 急兄仇张飞遇害 雪弟恨先主兴兵.txt'
'第二十八回 斩蔡阳兄弟释疑 会古城主臣聚义.txt'
'第二十二回 袁曹各起马步三军 关张共擒王刘二将.txt'
'第二十回 曹阿瞒许田打围 董国舅内阁受诏.txt'
'第二十九回 小霸王怒斩于吉 碧眼儿坐领江东.txt'
'第二十六回 袁本初败兵折将 关云长挂印封金.txt'
'第二十七回 美髯公千里走单骑 汉寿侯五关斩六将.txt'
'第二十三回 祢正平裸衣骂贼 吉太医下毒遭刑.txt'
'第二十四回 国贼行凶杀贵妃 皇叔败走投袁绍.txt'
'第二十五回 屯土山关公约三事 救白马曹操解重围.txt'
'第二十一回 曹操煮酒论英雄 关公赚城斩车胄.txt'
'第九回 除暴凶吕布助司徒 犯长安李倔听贾诩.txt'
'第九十八回 追汉军王双受诛 袭陈仓武侯取胜.txt'
'第九十二回 赵子龙力斩五将 诸葛亮智取三城.txt'
'第九十回 驱巨善六破蛮兵 烧藤甲七擒孟获.txt'
'第九十九回 诸葛亮大破魏兵 司马懿入寇西蜀.txt'
'第九十六回 孔明挥泪斩马谡 周鲂断发赚曹休.txt'
'第九十七回 讨魏国武侯再上表 破曹兵姜维诈献书.txt'
'第九十三回 姜伯约归降孔明 武乡侯骂死王朝.txt'
'第九十四回 诸葛亮乘雪破羌兵 司马懿克日擒孟达.txt'
'第九十五回 马谡拒谏失街亭 武侯弹琴退仲达.txt'
'第九十一回 祭泸水汉相班师 伐中原武侯上表.txt'
'第六回 焚金阙董卓行凶 匿玉玺孙坚背约.txt'
'第六十八回 甘宁百骑劫魏营 左慈掷杯戏曹操.txt'
'第六十二回 取涪关杨高授首 攻雒城黄魏争功.txt'
'第六十回 张永年反难杨修 庞士元议取西蜀.txt'
'第六十九回 卜周易管辂知机 讨汉贼五臣死节.txt'
'第六十六回 关云长单刀赴会 伏皇后为国捐生.txt'
'第六十七回 曹操平定汉中地 张辽威震逍遥津.txt'
'第六十三回 诸葛亮痛哭庞统 张翼德义释严颜.txt'
'第六十四回 孔明定计捉张任 杨阜借兵破马超.txt'
'第六十五回 马超大战葭萌关 刘备自领益州牧.txt'
'第六十一回 赵云截江夺阿斗 孙权遗书退老瞒.txt'
'第七回 袁绍磐河战公孙 孙坚跨江击刘表.txt'
'第七十八回 治风疾神医身死 传遗命奸雄数终.txt'
'第七十二回 诸葛亮智取汉中 曹阿瞒兵退斜谷.txt'
'第七十回 猛张飞智取瓦口隘 老黄忠计夺天荡山.txt'
'第七十九回 兄逼弟曹植赋诗 侄陷叔刘封伏法.txt'
'第七十六回 徐公明大战沔水 关云长败走麦城.txt'
'第七十七回 玉泉山关公显圣 洛阳城曹操感神.txt'
'第七十三回 玄德进位汉中王 云长攻拔襄阳郡.txt'
'第七十四回 庞令明抬榇决死战 关云长放水淹七军.txt'
'第七十五回 关云长刮骨疗毒 吕子明白衣渡江.txt'
'第七十一回 占对山黄忠逸待劳 据汉水赵云寡胜众.txt'
'第三十八回 定三分隆中决策 战长江孙氏报仇.txt'
'第三十二回 夺冀州袁尚争锋 决漳河许攸献计.txt'
'第三十回 战官渡本初败绩 劫乌巢孟德烧粮.txt'
'第三十九回 荆州城公子三求计 博望坡军师初用兵.txt'
'第三十六回 玄德用计袭樊城 元直走马荐诸葛.txt'
'第三十七回 司马徽再荐名士 刘玄德三顾草庐.txt'
'第三十三回 曹丕乘乱纳甄氏 郭嘉遗计定辽东.txt'
'第三十四回 蔡夫人隔屏听密语 刘皇叔跃马过檀溪.txt'
'第三十五回 玄德南漳逢隐沧 单福新野遇英主.txt'
'第三十一回 曹操仓亭破本初 玄德荆州依刘表.txt'
'第十八回 贾文和料敌决胜 夏侯惇拨矢啖睛.txt'
'第十二回 陶恭祖三让徐州 曹孟穗大战吕布.txt'
'第十回 勤王室马腾举义 报父仇曹操兴师.txt'
'第十九回 下邳城曹操鏖兵 白门楼吕布殒命.txt'
'第十六回 吕奉先射戟辕门 曹孟德败师淯水.txt'
'第十七回 袁公路大起七军 曹孟德会合三将.txt'
'第十三回 李傕郭汜大交兵 杨奉董承双救驾.txt'
'第十四回 曹孟德移驾幸许都 吕奉先乘夜袭徐郡.txt'
'第十五回 太史慈酣斗小霸王 孙伯符大战严白虎.txt'
'第十一回 刘皇叔北海救孔融 吕温侯濮阳破曹操.txt'
'第四十八回 宴长江曹操赋诗 锁战船北军用武.txt'
'第四十二回 张翼德大闹长坂桥 刘豫州败走汉津口.txt'
'第四十回 蔡夫人议献荆州 诸葛亮火烧新野.txt'
'第四十九回 七星坛诸葛祭风 三江口周瑜纵火.txt'
'第四十六回 用奇谋孔明借箭 献密计黄盖受刑.txt'
'第四十七回 阚泽密献诈降书 庞统巧授连环计.txt'
'第四十三回 诸葛亮舌战群儒 鲁子敬力排众议.txt'
'第四十四回 孔明用智激周瑜 孙权决计破曹操.txt'
'第四十五回 三江口曹操折兵 群英会蒋干中计.txt'
'第四十一回 刘玄德携民渡江 赵子龙单骑救主.txt'
'第五回 发矫诏诸镇应曹公 破关兵三英战吕布.txt'
'第五十八回 马孟起兴兵雪恨 曹阿瞒割须弃袍.txt'
'第五十二回 诸葛亮智辞鲁肃 赵子龙计取桂阳.txt'
'第五十回 诸葛亮智算华容 关云长义释曹操.txt'
'第五十九回 许诸裸衣斗马超 曹操抹书问韩遂.txt'
'第五十六回 曹操大宴铜雀台 孔明三气周公瑾.txt'
'第五十七回 柴桑口卧龙吊丧 耒阳县凤雏理事.txt'
'第五十三回 关云长义释黄汉升 孙仲谋大战张文远.txt'
'第五十四回 吴国太佛寺看新郎 刘皇叔洞房续佳偶.txt'
'第五十五回 玄德智激孙夫人 孔明二气周公瑾.txt'
'第五十一回 曹仁大战东吴兵 孔明一气周公瑾.txt'
'第一百八回 丁奉雪中奋短兵 孙峻席间施密计.txt'
'第一百二回 司马懿占北原渭桥 诸葛亮造木牛流马.txt'
'第一百回 汉兵劫寨破曹真 武侯斗阵辱仲达.txt'
'第一百九回 困司马汉将奇谋 废曹芳魏家果报.txt'
'第一百六回 公孙渊兵败死襄平 司马懿诈病赚曹爽.txt'
'第一百七回 魏主政归司马氏 姜维兵败牛头山.txt'
'第一百三回 上方谷司马受困 五丈原诸葛禳星.txt'
'第一百十二回 救寿春于诠死节 取长城伯约鏖兵.txt'
'第一百十回 文鸯单骑退雄兵 姜维背水破大敌.txt'
'第一百十三回 丁奉定计斩孙綝 姜维斗阵破邓艾.txt'
'第一百十一回 邓士载智败姜伯约 诸葛诞义讨司马昭.txt'
'第一百四回 陨大星汉丞相归天 见木像魏都督丧胆.txt'
'第一百五回 武侯预伏锦囊计 魏主拆取承露盘.txt'
'第一百一回 出陇上诸葛妆神 奔剑阁张郃中计.txt'
#打开其中的一个txt文件
却说孔明用减兵添灶之法,退兵到汉中;司马懿恐有埋伏,不敢追>    赶,亦收兵回长安去了,因此蜀兵不曾折了一人。孔明大赏三军已>    毕,回到成都,入见后主,奏曰:“ 老臣出了祁山,欲取长安,忽>    承陛下降诏召回,不知有何大事?” 后主无言可对;良久,乃曰:>    “ 朕久不见丞相之面,心甚思慕,故特诏回,一无他事。” 孔明曰>    :“ 此非陛下本心,必有奸臣谗谮,言臣有异志也。” 后主闻言,>    默然无语。孔明曰:“ 老臣受先帝厚恩,誓以死报。今若内有奸邪>    ,臣安能讨贼乎?” 后主曰:“ 朕因过听宦官之言,一时召回丞相>    。今日茅塞方开,悔之不及矣!” 孔明遂唤众宦官究问,方知是苟>    安流言;急令人捕之,已投魏国去了。&1t;/p>孔明将妄奏的宦官诛
    戮,余皆废出宫外;又深责蒋琬、费祎等不能觉察奸邪,规谏

程序的基本框架为先爬取小说站点URL,后爬取目标小说的URL,每个章节的url地址,在爬取每个章节的正文内容

 

posted @ 2020-09-26 20:11  zou-ting-rong  阅读(1247)  评论(0编辑  收藏  举报