使用requests爬取小说
2024-10-01 10:31:02
实现:
import requests
import re
import time def get_chapter(aim_url):
'''
获取小说章节名称和对应的url地址
:param aim_url:小说目录页url
:return:章节名和url的字典
''' ret = requests.get(aim_url)
content = ret.content.decode('gbk') li = re.findall('<li><a.*</li>',content) #获取小说章节的地址 url_dic = {}
for i in li:
print(i)
chapter = re.search(r'">.*</a',i).group()[:-]
url = aim_url + re.search(r'[0-9]{7}.html',i).group()
url_dic[chapter] = url return url_dic def get_content(chapter_url):
'''
获取小说内容
:param chapter_url:章节名和url的字典
:return:
'''
requests.adapters.DEFAULT_RETRIES = for chapter,url in chapter_url.items(): try:
ret = requests.get(url).content.decode('gbk')
except requests.exceptions.ConnectionError:
print('连接太快了..等等')
time.sleep()
ret = requests.get(url).content.decode('gbk') #匹配正文
ret = ret.replace('\n','')
content = re.search(r'<div id="content" class="content">.*chapterpage',ret).group()[:] #替换正文中的html标签
content = content.replace(' ',' ')
content = content.replace('<br />', ' ')
content = content.replace(''', '') #将内容写入文件中
with open('novel.txt',mode='a',encoding='utf-8') as f:
f.write(chapter+'\n')
f.write(content)
f.write('\n\n') print(chapter) if __name__ == '__main__':
li = get_chapter('https://www.9dxs.com/2/2348/index.html')
get_content(li)
遇到的问题:
爬取一半时,抛出了requests.exceptions.ConnectionError异常
分析:
- 请求连接数太多
- 请求速度过快
解决:
- 设置默认重连数:
requests.adapters.DEFAULT_RETRIES = 5
- 捕捉异常,等待5秒后再重试
try:
ret = requests.get(url).content.decode('gbk')
except requests.exceptions.ConnectionError:
print('连接太快了..等等')
time.sleep()
ret = requests.get(url).content.decode('gbk')
最新文章
- ASP.NET Core服务器综述
- 【poj2417】 Discrete Logging
- OkHttp学习总结
- Java [Leetcode 101]Symmetric Tree
- pomelo 服务器开发常用术语
- js+css实现模态层效果
- eclipse安装Flash Builder 4后变成中文,怎么解决
- [TYVJ] P1010 笨小猴
- UITextField和UIViewConteoller
- HDU - 3853
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新
- JSF-受管Bean与EL表达式
- JS-MD5加密
- PHP 标准规范,PSR-1,PSR-2,PSR-3,PSR-4,PSR-5,PSR-6,PSR-7及其他标准
- svg(一)
- LuoguP2257 YY的GCD
- centos7 下安装 nginx-1.12.2
- 初识thinkphp(5)
- Hbase 学习(十) HBase Snapshots
- 持续集成之四:Jenkins+sonarqube
热门文章
- [Angular] Performance Caching Policy - Cache First, Network Last
- 高速学会Mac上托管代码到github(具体解释)
- 推送_即时推送_即时通讯_在线Demo
- POJ3190 Stall Reservations 贪心
- linux下udev简介【转】
- Android的编译环境--Build系统【转】
- hdoj--1045--Fire Net(二分图)
- x+=y与x=x+y相同吗?
- php保存远程图片
- hihoCoder-1830 2018亚洲区预选赛北京赛站网络赛 C.Cheat 模拟