漂亮汤和Python的属性错误

2024-04-26 21:30:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码,但今天我运行它,它就坏了。我已经把给我带来问题的相关部分撤了出来。在

from bs4 import BeautifulSoup
import requests

webpage = requests.get('http://www.bbcgoodfood.com/search/recipes?query=')

soup = BeautifulSoup(webpage.content) 
links = soup.find("div",{"class":"main row grid-padding"}).find_all("h2",{"class":"node-title"})

for link in links:
    print(link.a["href"]) 

这给了我一个错误“Attribute error:'NoneType'对象没有属性'find'all'”

这个错误到底在告诉我什么?在

find_all()是beautiful soup文档中的有效命令。 浏览网页的源代码,我找到我想要的对象的路径似乎是有意义的。在

我想这个网站一定有什么变化,因为我不明白我的代码怎么会停止工作。但我不太明白错误信息。。。在

谢谢你的帮助!在


Tags: 对象代码fromimport错误linklinksall
2条回答

这是因为当您试图访问该页时,它给您permission denied,因此soup.find()不返回NoneNone没有{}的属性,这会给您一个AttributeError。在

from bs4 import BeautifulSoup
import requests

webpage = requests.get('http://www.bbcgoodfood.com/search/recipes?query=')


print webpage.content
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>

You don't have permission to access "http&#58;&#47;&#47;www&#46;bbcgoodfood&#46;com&#47;search&#47;recipes&#63;" on this server.<P>
Reference&#32;&#35;18&#46;4fa9cd17&#46;1428789762&#46;680369dc
</BODY>
</HTML>

如果您通过添加带有适当用户代理(如@Vader建议的)的头来解决此问题,则代码将正常运行:

^{pr2}$

您尝试分析的站点不“喜欢”您的用户代理,并返回403错误,然后解析器失败,因为它找不到div。尝试将用户代理更改为以下浏览器之一的用户代理:

webpage = requests.get('http://www.bbcgoodfood.com/search/recipes?query=', headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'})

相关问题 更多 >