AttributeError - 网络抓取 - Python - Selenium
AttributeError - webscraping - Python - Selenium
我需要从网上抓取以下 table,但我无法使用 "find_all" 函数解决问题。 PyCharm 总是说:
AttributeError: 'NoneType' object has no attribute 'find_all'
我不知道怎么了。尝试使用 table.find_all("tr") 或 table.find_all('tr') 字符和下一个属性,如 table.find_all("tr", attrs={"class": "table table-export"}) 和下一个选项,但没有任何效果。
你能告诉我我做错了什么吗?
Table:
<div class="table-options">
<table class="table table-export">
<thead>
<tr>
<!-- ngIf: ActuallyPoints && ActuallyPoints.name == 'AXB' --><th ng-if="currentRole && currentRole.name == 'AXB'" class="id check">
<label ng-click="selectAll()"><input disabled="" id="select-all" type="checkbox" ng-model="all" class="valid value-ng">All</label>
</th><!-- end ngIf: currentRole && currentRole.name == 'AXB' -->
<th>AAA</th>
<th>BBB</th>
<th>CCC</th>
</tr>
</thead>
<tbody>
<!-- ngRepeat: x in ErrorStatus --><tr ng-repeat="x in ErrorStatus" class="random-id">
<!-- ngIf: currentRole && currentRole.name == 'AXB' --><td ng-if="currentRole && currentRole.name == 'AXB'" class="random-id">
<input type="checkbox" ng-model="x.checked" ng-change="selectOne(x)" class="valid value-ng">
</td><!-- end ngIf: currentRole && currentRole.name == 'AXB' -->
<td class="pax">111</td>
<td class="pax">222</td>
<td class="pax">333</td>
</td>
</tr><!-- end ngRepeat: x in ErrorStatus -->
</tbody>
</table>
</div>
代码:
import lxml
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'xxx'
website = request.urlopen(url).read()
soup = BeautifulSoup(website, "lxml")
table = soup.find("table", attrs={"class": "table table-export"})
rows = table.find_all('tr')
非常感谢。
我无法提供解决方案,因为没有link,但错误的解释很简单:
AttributeError: 'NoneType' object has no attribute 'find_all'
让我们看看您在代码中的什么地方使用了 .find_all
:
rows = table.find_all('tr')
考虑到解释器所说的,这段代码实际上是这样的:
rows = None.find_all('tr')
换句话说,您的变量 table
等于 None
。因此,您的问题在这里:
table = soup.find("table", attrs={"class": "table table-export"}) # returns None
在人类语言中,您试图在 html 中找到一些 table,然后将其存储到变量 table
,但 soup.find()
无法做到使用您提供的说明查找元素,因此返回 None
。您没有注意到它并尝试调用 None.find_all()
,但是 None
没有此方法。
这就是您收到此错误的原因。如果您无法分享link,请自行重新检查这篇文章,因为它不起作用:
table = soup.find("table", attrs={"class": "table table-export"}) # returns None
UPD:首先,尝试打印变量 soup
并检查 table 是否存在,因为您在浏览器中看到的 html 和 html ,您应要求收到,可能完全不同:
soup = BeautifulSoup(website, "lxml")
print(soup)
我需要从网上抓取以下 table,但我无法使用 "find_all" 函数解决问题。 PyCharm 总是说:
AttributeError: 'NoneType' object has no attribute 'find_all'
我不知道怎么了。尝试使用 table.find_all("tr") 或 table.find_all('tr') 字符和下一个属性,如 table.find_all("tr", attrs={"class": "table table-export"}) 和下一个选项,但没有任何效果。 你能告诉我我做错了什么吗?
Table:
<div class="table-options">
<table class="table table-export">
<thead>
<tr>
<!-- ngIf: ActuallyPoints && ActuallyPoints.name == 'AXB' --><th ng-if="currentRole && currentRole.name == 'AXB'" class="id check">
<label ng-click="selectAll()"><input disabled="" id="select-all" type="checkbox" ng-model="all" class="valid value-ng">All</label>
</th><!-- end ngIf: currentRole && currentRole.name == 'AXB' -->
<th>AAA</th>
<th>BBB</th>
<th>CCC</th>
</tr>
</thead>
<tbody>
<!-- ngRepeat: x in ErrorStatus --><tr ng-repeat="x in ErrorStatus" class="random-id">
<!-- ngIf: currentRole && currentRole.name == 'AXB' --><td ng-if="currentRole && currentRole.name == 'AXB'" class="random-id">
<input type="checkbox" ng-model="x.checked" ng-change="selectOne(x)" class="valid value-ng">
</td><!-- end ngIf: currentRole && currentRole.name == 'AXB' -->
<td class="pax">111</td>
<td class="pax">222</td>
<td class="pax">333</td>
</td>
</tr><!-- end ngRepeat: x in ErrorStatus -->
</tbody>
</table>
</div>
代码:
import lxml
from urllib.request import urlopen
from bs4 import BeautifulSoup
url = 'xxx'
website = request.urlopen(url).read()
soup = BeautifulSoup(website, "lxml")
table = soup.find("table", attrs={"class": "table table-export"})
rows = table.find_all('tr')
非常感谢。
我无法提供解决方案,因为没有link,但错误的解释很简单:
AttributeError: 'NoneType' object has no attribute 'find_all'
让我们看看您在代码中的什么地方使用了 .find_all
:
rows = table.find_all('tr')
考虑到解释器所说的,这段代码实际上是这样的:
rows = None.find_all('tr')
换句话说,您的变量 table
等于 None
。因此,您的问题在这里:
table = soup.find("table", attrs={"class": "table table-export"}) # returns None
在人类语言中,您试图在 html 中找到一些 table,然后将其存储到变量 table
,但 soup.find()
无法做到使用您提供的说明查找元素,因此返回 None
。您没有注意到它并尝试调用 None.find_all()
,但是 None
没有此方法。
这就是您收到此错误的原因。如果您无法分享link,请自行重新检查这篇文章,因为它不起作用:
table = soup.find("table", attrs={"class": "table table-export"}) # returns None
UPD:首先,尝试打印变量 soup
并检查 table 是否存在,因为您在浏览器中看到的 html 和 html ,您应要求收到,可能完全不同:
soup = BeautifulSoup(website, "lxml")
print(soup)