Python BeautifulSoup刮削-属性错误:';非类型';对象没有属性';查找';
我正在和美女苏练习刮水。下面是我的代码和网页及其元素的屏幕截图。我正试图从reddit.com获取每篇文章的Python BeautifulSoup刮削-属性错误:';非类型';对象没有属性';查找';,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正在和美女苏练习刮水。下面是我的代码和网页及其元素的屏幕截图。我正试图从reddit.com获取每篇文章的标题 代码: 错误: Traceback (most recent call last): File "scrapingtest.py", line 21, in <module> postTitle = tClass.find("a", {"class", "title"}) AttributeError: 'NoneType' object has no att
标题
代码:
错误:
Traceback (most recent call last):
File "scrapingtest.py", line 21, in <module>
postTitle = tClass.find("a", {"class", "title"})
AttributeError: 'NoneType' object has no attribute 'find'
回溯(最近一次呼叫最后一次):
文件“scrapingtest.py”,第21行,在
postTitle=tClass.find(“a”,{“class”,“title”})
AttributeError:“非类型”对象没有属性“查找”
错误原因
回溯(最近一次呼叫最后一次):
文件“scrapingtest.py”,第21行,在
postTitle=tClass.find(“a”,{“class”,“title”})
AttributeError:“非类型”对象没有属性“查找”
之所以会出现这种情况,是因为tClass
的值是None
。因此,我们无法在其上调用find
。这就是错误消息的状态
调试
请打印出soup
的值以检查您得到的html响应。有时Reddit会阻止重复的请求,并发送一条简单的消息,而不是通常的列表
可能的解决办法
使用适当的用户代理和其他东西来模拟人类的适当行为,在浏览器上浏览reddit
您可能还想尝试使用Selenium来实现这一点
选择
Reddit还提供用于收集数据和构建机器人的API。我个人从未尝试过。所以不确定什么是允许的,什么是不允许的。您可以查看他们的API,看看它是否符合您的需要 如何应用属性检查存在问题。而不是,例如:
{"class", "thing"}
它应该是一个字典,属性名称作为键,属性值作为值:
{"class": "thing"}
除此之外,通过搜索具有thing
类的元素,您将获得没有a
元素且具有class=“title”
的额外元素。要解决此问题,请通过额外检查数据类型
属性缩小搜索范围:
postTitles = soup.find_all("div", {"class", "thing", "data-type": "link"})
这不是一个答案,但为了以防万一,Reddit通过一个API(它有一个很棒的Python包装器)公开了他们的数据。这将使从Reddit收集数据比使用刮刀简单得多。
{"class": "thing"}
postTitles = soup.find_all("div", {"class", "thing", "data-type": "link"})