python 爬虫问题

如下图,是一个简易的网络python爬虫。进行数据采集。


import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
def scrape_info(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }

    response = requests.get(url, headers=headers)
    time.sleep(1)
    soup = BeautifulSoup(response.text, 'html.parser')

    # 定位到包含学校信息的表格
    table = soup.find('table', class_='score_table')
    data = []
    for row in table.find_all('tr'):
        cols = row.find_all('td')
        if len(cols) >= 7:
            university = cols[0].text.strip()
            province = cols[1].text.strip()
            project = cols[2].text.strip()
            category = cols[3].text.strip()
            subject = cols[4].text.strip()
            website = cols[6].find('a')['href']
            data.append([university, province, project, category, subject, website])
           
    return data

# 采集第一个网址的数据
url1 = 'http://college.gaokao.com/schlist/a1/'
data1 = scrape_info(url1)

# 采集第二个网址的数据
url2 = 'http://college.gaokao.com/schlist/'
data2 = scrape_info(url2)

# 合并两个数据列表
data = data1 + data2

# 创建 pandas DataFrame 对象
df = pd.DataFrame(data, columns=['University', 'Province', 'Project', 'Category', 'Subject', 'Website'])

# 将 DataFrame 对象保存为 CSV 文件
df.to_csv('university_info.csv', index=False)

# 将 DataFrame 对象保存为 Excel 文件
df.to_excel('university_info.xlsx', index=False)

运行出现如下问题:

Traceback (most recent call last):
  File "C:\Users\86138\Desktop\作业1.py", line 33, in <module>
    data1 = scrape_info(url1)
  File "C:\Users\86138\Desktop\作业1.py", line 18, in scrape_info
    for row in table.find_all('tr'):
AttributeError: 'NoneType' object has no attribute 'find_all'

求详细解答方法

for row in table.find_all('tr'):
这里看看是不是table根本没找到

table = soup.find('table', class_='score_table')
这里并没有获取到对应数据
所以建议先把table print出来

print(table)

然后看看打印出了啥。

错误发生的原因就是table = soup.find('table', class_='score_table')这一行没有正确定位到元素,导致table这个对象为None了,所以你下面的代码使用一个None对象去获取数据就会报你这个错误了。
我帮你检查过了,你要爬取的网页上没有class属性为score_table的table,所以你这样写是错误的。
解决方法就是,先明确你要解析什么数据,然后在网页上按F12,查看网页源码,找到你要解析的数据在源码中是什么样的格式,然后再修改代码进行解析。