Я наткнулся на этот отличный post на соскабливание с использованием Beautiful Soup, и я решил взять на себя задачу соскабливать некоторые данные из Интернета, чтобы попробовать.Скребок с красивым супом
Я использую данные полета от Flight Radar 24 и используя то, что было описано в сообщении в блоге, чтобы попытаться автоматизировать очистку страниц по данным полета.
import requests
import bs4
root_url = 'http://www.flightradar24.com'
index_url = root_url + '/data/flights/tigerair-tgw/'
def get_flight_id_urls():
response = requests.get(index_url)
soup = bs4.BeautifulSoup(response.text)
return [a.attrs.get('href') for a in soup.select('div.list-group a[href^=/data]')]
flight_id_urls = get_flight_id_urls()
for flight_id_url in flight_id_urls:
temp_url = root_url + flight_id_url
response = requests.get(temp_url)
soup = bs4.BeautifulSoup(response.text)
try:
table = soup.find('table')
rows = table.find_all('tr')
for row in rows:
flight_data = {}
flight_data['title'] = soup.select('div#cntPagePreTitle h1')[0].get_text()
flight_data['tr'] = row #error here
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
образец flight data page
я споткнулся до стола, а потом понял, что я не знаю, как пробежать вниз таблицу атрибутов, чтобы получить данные, которые были внедренными в каждом столбце.
У любой души есть какие-либо подсказки, даже учебные пособия, чтобы я мог прочитать, как извлечь данные.
P.S: кредиты Miguel Гринберг за отличный учебник
Добавлены
try:
table = soup.find('table')
rows = table.find_all('tr')
heads = [i.text.strip() for i in table.select('thead th')]
for tr in table.select('tbody tr'):
flight_data = {}
flight_data['title'] = soup.select('div#cntPagePreTitle h1')[0].get_text()
flight_data['From'] = tr.select('td.From')
flight_data['To'] = tr.select('td.To')
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
Я изменил последнюю часть моего кода, чтобы сформировать объект данных, но я не могу показаться, чтобы получить данные.
Окончательное редактирование:
import requests
import bs4
root_url = 'http://www.flightradar24.com'
index_url = root_url + '/data/flights/tigerair-tgw/'
def get_flight_id_urls():
response = requests.get(index_url)
soup = bs4.BeautifulSoup(response.text)
return [a.attrs.get('href') for a in soup.select('div.list-group a[href^=/data]')]
flight_id_urls = get_flight_id_urls()
for flight_id_url in flight_id_urls:
temp_url = root_url + flight_id_url
response = requests.get(temp_url)
soup = bs4.BeautifulSoup(response.text)
try:
table = soup.find('table')
rows = table.find_all('tr')
for row in rows:
flight_data = {}
flight_data['flight_number'] = tr['data-flight-number']
flight_data['from'] = tr['data-name-from']
print (flight_data)
except AttributeError as e:
raise ValueError("No valid table found")
P.S.S: Все благодаря @amow за большую помощь: D
'Я не знаю, как перенести атрибуты таблицы, чтобы получить данные, которые были встроены в каждый столбец. 'Просто разместите исходный код здесь. –