from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html,"html.parser")
for child in bsObj.find("table",{"id":"giftlist"}).children:
print(child)
有人能告诉我我的代码有什么问题吗? :(((接下来该怎么做?
答案 0 :(得分:1)
我不确定您是否已经解决了3年前发布的此问题,但是我认为您犯了一个小错误。
标签的ID不是“礼物清单”,而是“礼物清单”
您的代码是否来自O'Reilly系列丛书中的“使用Python进行网络搜刮”一书?我从那本书中找到了完全相同的代码,包括该网页pythonscraping.com/pages/page3.html,该网页由作者发布,目的是为读者提供一个练习的地方。顺便说一句,它也是giftList,所以我认为您可能复制了错误的代码
现在尝试这个
for child in bsObj.find("table",{"id":"giftList"}).children:
print(child)
答案 1 :(得分:0)
一种选择是将违规循环结构放入try中,然后处理当interator返回None时出现的异常:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html,"html.parser")
try:
for child in bsObj.find("table",{"id":"giftlist"}).children:
print(child)
except AttributeError:
# do what you want to do when bsObj.find() returns None
或者您可以在进入循环之前检查结果列表中的无:
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html,"html.parser")
result = bsObj.find("table",{"id":"giftlist"})
if result:
for child in result.children:
print(child)
else:
# do what you want to do when bsObj.find() returns None
答案 2 :(得分:0)
这是错字问题。我也遇到了同样的问题。在网页中,ID名称应为“id =”gift L ist“,而非礼品列表。 它应该在修改id名称后起作用。试试吧。
答案 3 :(得分:0)
您应将代码放在try-except块中
from urllib.request import urlopen
from bs4 import BeautifulSoup
html = urlopen("http://www.pythonscraping.com/pages/page3.html")
bsObj = BeautifulSoup(html,"html.parser")
try:
for child in bsObj.find("table",{"id":"giftlist"}).children:
print(child)
except AttributeError as e:
print(e)
except:
print("An error has occured")
***在您访问我的网站的情况下,该ID不是“ giftlist”,这是“ giftLift”,您输入错误,这就是为什么find函数不返回任何类型对象的原因。