У вас будут лучшие (и более быстрые) результаты, если вы пойдете прямо к установкам газового типа, в отличие от проверки КАЖДОЙ установки и проверки того, является ли она газовой или нет.
Вы можете получить списокГазовые установки, используя следующие параметры:
payload = {
'op': 'menu_name',
'type': '2',
'cnt': '226',
'st': '0'}
Это сократит необходимость поиска более 46 000 запросов до 1384, которые являются газами, и избавится от if power_grids == "Gas"
, поскольку мы уже знаем, чтоесть все "Gas"
Ваш код, похоже, застрял в вашем while True
.Это потому, что вы увеличиваете i
вне этого цикла, поэтому я исправил это.
Наконец, я не проверял ваши данные, которые вы там просматриваете (т. Е. Gas_unit_values, gas_capacity и т. Д.).Похоже, что некоторые из этих значений являются пустыми.Поэтому я оставлю это для вас, чтобы поработать, так как этот код должен по крайней мере преодолеть это первое препятствие.
#Import packages
from bs4 import BeautifulSoup
import pandas as pd
import requests
url = 'http://www.globalenergyobservatory.com/geoutility.php'
payload = {
'op': 'menu_name',
'type': '2',
'cnt': '226',
'st': '0'}
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36'}
response = requests.get(url, headers=headers, params=payload)
soup = BeautifulSoup(response.text, 'html.parser')
links = []
gas_links = soup.find_all('a')
for ele in gas_links:
link = ele['href']
links.append(link)
gas_df = pd.DataFrame()
for pid in links:
url="http://www.globalenergyobservatory.com" + pid
page=requests.get(url)
soup=BeautifulSoup(page.text,'html.parser')
#Distinguish power plants to different types of primary fuel
types=soup.find(id="Type")
power_types=types["value"]
###Breakdown of different units
i = 1
while True:
if soup.find(id="unitcheck" + str(i)) == None:
break
else:
gas_unit=soup.find(id="unitcheck" + str(i))
gas_unit_values=gas_unit["value"]
gas_capacity=soup.find(id="Capacity_(MWe)_nbr_" + str(i))
gas_capacity_values=gas_capacity["value"]
gas_commissioned=soup.find(id="Date_Commissioned_dt_" + str(i))
gas_commissioned_date=gas_commissioned["value"]
gas_decommissioned=soup.find(id="Decommission_Date_dt_" + str(i))
gas_decommissioned_date=gas_decommissioned["value"]
gas_HRSG=soup.find(id="Boiler/HRSG_Manufacturer_" + str(i))
gas_HRSG_OEM=gas_HRSG["value"]
gas_turbine=soup.find(id="Turbine_Manufacturer_" + str(i))
gas_turbine_OEM=gas_turbine["value"]
gas_generator=soup.find(id="Generator_Manufacturer_" + str(i))
gas_generator_OEM=gas_generator["value"]
temp_df = pd.DataFrame([[gas_unit_values,gas_capacity_values,gas_commissioned_date,gas_decommissioned_date,gas_HRSG_OEM,gas_turbine_OEM,gas_generator_OEM]],
columns = ['Unit','Capacity','Date_commissioned','Date_decommissioned','HRSG_manufacturer','Turbine_manufacturer','Generator_manufacturer'])
gas_df = gas_df.append(temp_df)
i = i+1
print('%s of %s complete: pid: %s' %(links.index(pid)+1, len(links), pid.split('=')[-1]))
#Gas units breakdowns
gas_df = gas_df.reset_index(drop=True)
#Convert to csv file
gas_df.to_csv('C:/gas_units_breakdowns.csv',index=False)