我正在制作一个用于网络抓取的程序,但这是我第一次。我正在使用的教程是针对python 2.7构建的,但是我正在使用3.8.2。我大部分时间都在编辑代码以使其适合python 3,但弹出一个错误,我无法修复。
import requests
import csv
from bs4 import BeautifulSoup
url = 'http://www.showmeboone.com/sheriff/JailResidents/JailResidents.asp'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(features="html.parser")
results_table = soup.find('table', attrs={'class': 'resultsTable'})
output = []
for row in results_table.findAll('tr'):
output_rows = []
for cell in tr.findAll('td'):
output_rows.append(cell.text.replace(' ', ''))
output.append(output_rows)
print(output)
handle = open('out-using-requests.csv', 'a')
outfile = csv.writer(handle)
outfile.writerows(output)
我得到的错误是:
Traceback (most recent call last):
File "C:\Code\scrape.py", line 17, in <module>
for row in results_table.findAll('tr'):
AttributeError: 'NoneType' object has no attribute 'findAll'
我正在使用的教程是https://first-web-scraper.readthedocs.io/en/latest/
我尝试了其他一些问题,但没有帮助。
请帮助!!!
编辑:没关系,我得到了一个很好的答案。
答案 0 :(得分:0)
find
如果找不到匹配项,则返回None
。您需要先进行检查,然后再尝试在其中找到任何子元素:
results_table = soup.find('table', attrs={'class': 'resultsTable'})
output = []
if results_table:
for row in results_table.findAll('tr'):
output_rows = []
for cell in tr.findAll('td'):
output_rows.append(cell.text.replace(' ', ''))
output.append(output_rows)
答案 1 :(得分:0)
该错误允许得出以下结论:
results_table = None
因此,您无法访问findAll()
方法,因为None.findAll()
不存在。
您应该看一下,最好使用调试器来运行您的程序,并查看变量如何逐行更改以及为什么提到的行仅返回```None''。这行特别重要:
results_table = soup.find('table', attrs={'class': 'resultsTable'})
因为在此行中将results_table初始化为yes,所以在这里分配了上面的none'' value is returned and
results_table''。