- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从“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/
我是一名优秀的程序员,十分优秀!