所以我的任务是编写一个程序,从网页中读取所有数据并打印表格的所有超链接:
<a href="link">link text</a>
到目前为止,在我的导师帮助下,我已经走到了这一步。
from urllib.request import urlopen
def findTitle(webpage):
encoding = "utf-8"
for webpagestr in webpage:
webpagestr = str(webpagestr,encoding)
if "<title>" in webpagestr:
indexstart = webpagestr.find("<title>")
indexend = webpagestr.find("</title>")
title = webpagestr[indexstart+7:indexend]
return title
return title
def H1headings(webpage):
encoding = "utf-8"
for webpagestr in webpage:
webpagestr = str(webpagestr,encoding)
if "<h1>" in webpagestr:
indexstart = webpagestr.find("<h1>")
indexend = webpagestr.find("</h1>")
heading = webpagestr[indexstart+4:indexend]
print(heading)
def main():
address = input("Enter URL to find title and more information: ")
try:
webpage = urlopen(address)
title = findTitle(webpage)
print("Title is", title)
H1headings(webpage)
webpage.close()
except Exception as exceptObj:
print("Error: ", str(exceptObj))
main()
当我运行这个程序时,它允许我输入一个URL,但在它给我一个: 错误:本地变量&#39; title&#39;在分配前引用
我不确定这意味着什么。
然后我放置了一次尝试:
def findTitle(webpage):
title = "Not Found"
encoding = "utf-8"
运行程序,它会给我:
Enter URL to find title and more information: http://jeremycowart.com
Title is not found
<a href="http://jeremycowart.com">Jeremy Cowart</a>
这是我正在寻找的东西,但我相信我想要有标题和标题以及链接文字。
我已经接近但我无法弄明白。任何帮助将不胜感激!
答案 0 :(得分:0)
我看到至少有几个问题。
在您的函数findTitle
中,即使您找不到变量,也始终返回变量title
,因此无法将变量title
设置为任何事情,因此当它无法在网页上找到标题时(无论是因为没有一个或你的代码未能找到它),它返回的是一个尚未创建/分配的变量爱好。
首先,您应该修复您的代码,以便它不会这样做。您可以更改最终的return语句以返回默认值,例如"Not found"
或者您可以将title设置为函数顶部的默认值,这可以保证无论何时返回它都会存在,例如:
def foo(x):
y = -1
<do stuff, maybe re-setting y>
return y
这是我更喜欢的模式。
但是还有另一个问题,即阻止您正确检测标题。如果你单步执行程序,你应该看到它。基本上,你开始循环,获得第一行,检查它是否有标题;如果它确实你返回它(好),如果它没有你跳过if,但是你仍然返回它(不太好)并且你永远不会到达第二行。