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