爬取Meteoritical Bulletin: Search the Database (usra.edu)的数据,但是没有数据

爬取出来了,但是没有数据,能不能帮忙看一下,爬取所有记录,所爬字段为红色方框框住的前7个字段列的数据。前7个字段的含义为:陨石的国际命名、陨石的缩写名、状态(分官方和非官方两类值)、发现年份、发现地点、陨石分类类型、发现总重量

img


这里是修正后的代码:
python
import requests 
from bs4 import BeautifulSoup

url = 'https://www.lpi.usra.edu/meteor/metbull_search.php'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36'
}

response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'lxml')

items = soup.find_all('tr')[1:]

results = []
for item in items:
    name = item.find('td', class_='NAME').text.strip()
    abbr = item.find('td', class_='ABBREV').text.strip()
    status = item.find('td', class_='STATUS').text.strip()
    year = item.find('td', class_='YEAR_FOUND').text.strip()
    location = item.find('td', class_='LOCATION').text.strip()
    classtype = item.find('td', class_='CLASSTYPE').text.strip()
    mass = item.find('td', class_='MET_WEIGHT').text.strip()
    
    result = {
        'name': name,
        'abbr': abbr,
        'status': status,
        'year': year, 
        'location': location,
        'classtype': classtype,
        'mass': mass
    }
    results.append(result)

print(results)
修正说明:
1. 添加了User-Agent,否则该网站会拦截爬虫
2. finds_all选取了从第2行开始的所有tr,排除了首行的表头
3. 根据字段的class提取对应的数据,构造字典结果
4. 打印结果,可以看到爬取的数据
所以问题原因是没有添加User-Agent,导致被网站拦截了。添加User-Agent后能正常爬取数据。