Ошибка TypeEr: объект NoneType не является подпиской веб-очистки Python - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь собрать информацию с веб-сайта, написанного на html.Ниже приведен мой код:

#Import packages
import urllib.request
from bs4 import BeautifulSoup
import pandas as pd
import csv   


#For loop to scrap details of power plants
lst=[]
for i in range(1,46624):
     pid=str(i)
     url="http://www.globalenergyobservatory.com/form.php?pid=" + pid
     page=urllib.request.urlopen(url)
     soup=BeautifulSoup(page,'html.parser')

     #Distinguish power plants to different types of primary fuel
     types=soup.find(id="Type")
     power_types=types["value"]


     #No of units of power plant
     unit=soup.find(id="Abstract_Block")
     unit_breakdown_describe=unit.get_text()

     #Name of power plant
     name=soup.find(id="Name")
     name_value=name["value"]

     #Status of power plant
     status1=soup.find(id="Status_of_Plant_enumfield_itf")
     status2=status1.find(selected="selected") 
     status=status2["value"]

     #Latitude & longitude of power plant
     lat=soup.find(id="Latitude_Start")
     latitude=lat["value"]
     long=soup.find(id="Longitude_Start")
     longitude=long["value"]

     #Capacity of power plant
     cap=soup.find(id="Design_Capacity_(MWe)_nbr") 
     capacity=cap["value"]

lst.append([name_value,status,power_types,capacity,latitude,longitude,unit_breakdown_describe])
df=pd.DataFrame(lst)    #Convert to dataframe for storage
df.columns=['Name','Status','Type_of_power_plant','Capacity','Latitude','Longitude','no_of_units'] 

#Convert to csv file
df.to_csv('power.csv',sep='\t') 

Я пытаюсь очистить информацию и поместить ее в DataFrame для преобразования в файл csv.Хотя я не обнаружил никаких ошибок при попытке запустить соответствующие значения (например, print (емкость)), ошибка появилась, когда я пытаюсь преобразовать в файл csv.Я понимаю, что есть похожие темы, но я надеюсь, что любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 19 февраля 2019

Единственная ошибка, которую я вижу, состоит в том, что строка, в которой вы добавляете данные в список, не имеет правильного отступа. Она должна быть внутри цикла, и там CSV будет правильно заполнен

lst=[]
for i in range(1,46624):

    # Your code here

    #Capacity of power plant
    cap=soup.find(id="Design_Capacity_(MWe)_nbr") 
    capacity=cap["value"]

    lst.append([name_value,status,power_types,capacity,latitude,longitude,unit_breakdown_describe])
...