AttributeError:“ NoneType”对象在网络抓取工具中没有属性“ findAll”

时间:2020-04-04 19:35:46

标签: python

我正在制作一个用于网络抓取的程序,但这是我第一次。我正在使用的教程是针对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/

我尝试了其他一些问题,但没有帮助。

请帮助!!!

编辑:没关系,我得到了一个很好的答案。

2 个答案:

答案 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('&nbsp;', ''))


        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''。