gpt4 book ai didi

python - 如何从古腾堡自动下载书籍

转载 作者:行者123 更新时间:2023-11-28 22:18:46 25 4
gpt4 key购买 nike

我正在尝试从“http://www.gutenberg.org/”下载书籍。我想知道为什么我的代码什么也得不到。

import requests
import re
import os
import urllib

def get_response(url):
response = requests.get(url).text
return response

def get_content(html):
reg = re.compile(r'(<span class="mw-headline".*?</span></h2><ul><li>.*</a></li></ul>)',re.S)
return re.findall(reg,html)


def get_book_url(response):
reg = r'a href="(.*?)"'
return re.findall(reg,response)

def get_book_name(response):
reg = re.compile('>.*</a>')
return re.findall(reg,response)


def download_book(book_url,path):
path = ''.join(path.split())
path = 'F:\\books\\{}.html'.format(path) #my local file path

if not os.path.exists(path):
urllib.request.urlretrieve(book_url,path)
print('ok!!!')
else:
print('no!!!')

def get_url_name(start_url):
content = get_content(get_response(start_url))
for i in content:
book_url = get_book_url(i)
if book_url:
book_name = get_book_name(i)
try:
download_book(book_url[0],book_name[0])
except:
continue

def main():
get_url_name(start_url)

if __name__ == '__main__':
start_url = 'http://www.gutenberg.org/wiki/Category:Classics_Bookshelf'
main()

我已经运行了代码但什么也没得到,没有回溯。如何从网站自动下载书籍?

最佳答案

I have run the code and get nothing,no tracebacks.

好吧,在 download_book() 中出现异常的情况下,您不可能获得回溯,因为您明确地让它们保持沉默:

        try:
download_book(book_url[0],book_name[0])
except:
continue

所以你要做的第一件事是至少打印出错误:

        try:
download_book(book_url[0],book_name[0])
except exception as e:
print("while downloading book {} : got error {}".format(book_url[0], e)
continue

或者根本不捕获异常(至少在您知道会发生什么以及如何处理它之前)。

I don't even know how to fix it

学习如何调试实际上比学习如何编写代码更重要。一般介绍,你要read this first .

对于更特定于 python 的内容,这里有几种跟踪程序执行的方法:

1/在重要的地方添加 print() 调用来检查你真正得到了什么

2/在交互式 python shell 中导入您的模块并单独测试您的函数(当它们都不依赖于全局变量时这会更容易)

3/use the builtin step debugger

现在您的代码存在一些明显的问题:

1/你没有测试 request.get() 的结果 - HTTP 请求失败的原因有很多,你得到响应并不意味着你得到了预期的响应(您也可以有 400+ 或 500+ 响应。

2/你使用正则表达式来解析 html。 不要 - 正则表达式不能可靠地处理 html,你需要一个合适的 HTML 解析器(BeautifulSoup 是网络抓取的规范解决方案,因为它非常宽容)。此外,您的某些正则表达式看起来很不对(贪婪匹配等)。

关于python - 如何从古腾堡自动下载书籍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com