import requests
import re
import os
html = requests.get('https://www.kanunu8.com/book/5874/').content.decode('GB2312')
def get_toc(html):
toc_url_list = []
toc_block = re.findall('正文(.*?)</tbody>', html, re.S)[0]
toc_url = re.findall('href="(.*?)"', toc_block, re.S)
for url in toc_url:
toc_url_list.append('https://www.kanunu8.com/book/5874/'+url)
return toc_url_list
httls = get_toc(html)
for httl in httls:
httl = requests.get(httl).content.decode('GBK')
def get_article(httl):
chapter_name = re.search('size="4">(.*?)<', httl, re.S).group(1)
text_block = re.search('<p>(.*?)</p>', httl, re.S).group(1)
text_block = text_block.replace('<br />', '')
return chapter_name, text_block
chapter_name = get_article(httl)
text_block = get_article(httl)
def save(chapter_name, text_block):
os.makedirs('风雨燕归来', exist_ok=True)
file_path = os.path.join('风雨燕归来', 'chapter_name.txt')
with open(file_path, 'w', encoding='utf-8') as f:
f.write(text_block)
改成下面的就行,有帮助麻烦点个采纳【本回答右上角】,谢谢~~
你的问题主要在于获取内容的代码未放如for循环中,save也未调用,还有一些小问题看注释
import requests
import re
import os
def get_toc(html):
toc_url_list = []
toc_block = re.findall('正文(.*?)</tbody>', html, re.S)[0]
toc_url = re.findall('href="(.*?)"', toc_block, re.S)
for url in toc_url:
toc_url_list.append('https://www.kanunu8.com/book/5874/'+url)
return toc_url_list
def get_article(httl):
chapter_name = re.search('size="4">(.*?)<', httl, re.S).group(1)
text_block = re.search('<p>(.*?)</p>', httl, re.S).group(1)
text_block = text_block.replace('<br />', '')
return chapter_name,text_block
#下面这2局放到上面的for..in里面,而且for...in调整下位置
#chapter_name = get_article(httl)
#text_block = get_article(httl)
def save(chapter_name, text_block):
os.makedirs('风雨燕归来', exist_ok=True)
file_path = os.path.join('风雨燕归来', chapter_name+'.txt')#这里文件名直接写死了,未使用传入的参数
with open(file_path, 'w', encoding='utf-8') as f:
f.write(text_block)
html = requests.get('https://www.kanunu8.com/book/5874/').content.decode('GB2312')
httls = get_toc(html)
for httl in httls:
httl = requests.get(httl).content.decode('GBK')
chapter_name,text_block = get_article(httl)#只需要调用一次分别获取对应的值就行
save(chapter_name,text_block)#==========调用保存
🙏🙏,现在已经成功了