2017-06-19 6 views
0

countyのリストに以下のリストが表示されています。各繰り返しの結果をリスト内の項目のインデックスと共に表示すると、毎回インデックスが0になり、各ループの後にデータがリストに残っていないことがわかります。その結果、ループが完了した後にcountyループのインデックスを作成しようとすると、まったくデータが存在しないため、「リストのインデックスが範囲外です」というエラーが表示されます。ループを使用したPythonリストの集計

countyのリストが空だが、なぜそれが空であるのかがわかっているので、私は取得し続けている「リストの範囲外のエラー」を調べました。

target_divsリスト内の一つのエントリを構成するHTMLソースコードは次のようになります。ここでは

<div class="school-type-list-text"> 
<div class="table_cell_county"><a href='/alabama/autauga-county'>Autauga County</a></div> 
<div class="change_div"></div> 
<div class="table_cell_other">7<span> Schools</span></div> 
<div class="table_cell_other">1,587<span> Students</span></div> 
<div class="table_cell_other">8%<span> Minority</span></div> 
<div class="break"></div> 

は私のスクリプトです:

import urllib2 
from bs4 import BeautifulSoup 
import pandas 
import csv 

page1 = 'https://www.privateschoolreview.com/alabama' 
alabama = urllib2.urlopen(page1) 
soup = BeautifulSoup(alabama, "lxml") 
target_divs = soup.find_all("div", class_= "school-type-list-text") 

for i in target_divs: 
    county = i.find_all("div", class_= "table_cell_county") 
    for i in county: 
     print i.text 
     print county.index(i) 

print county 
print county[0] 

更新@ Software2がループカーソルを変更することをお勧めした後、しかし、私はまだ同じエラーが発生しています:

import urllib2 
from bs4 import BeautifulSoup 
import pandas 
import csv 

page1 = 'https://www.privateschoolreview.com/alabama' 

alabama = urllib2.urlopen(page1) 

soup = BeautifulSoup(alabama, "lxml") 

target_divs = soup.find_all("div", class_= "school-type-list-text") 

for div in target_divs: 
    counties = div.find_all("div", class_= "table_cell_county") 
    for county in counties: 
     print county.text 
     print counties.index(county) 

print counties 
+0

次の2つを持っている ''参照がOPコードからの出力を貼り付けた – depperm

+1

をi'というループfor':郡を移入するには、以下の方法を試してみてください。編集を控えてください。 –

答えて

0

私はwroかもしれませんあなたはこれを試すことができますか?あなたがネストされたループ内の2つの異なるものと同じ変数iを使用している

for i in target_divs: 
    county = i.find_all("div", class_= "table_cell_county") 
    for j in county: 
     print j.text 
     print county.index(j) 
0

ネストされたループの中で、あなたが同じIを使用しているようです。最初のものは上書きされています。 2番目の変数名を変更します。

理想的には、iのような変数名はあまり説明的ではなく、このような誤りを簡単にします。

for div in target_divs: 
    counties = div.find_all("div", class_= "table_cell_county") 
    for county in counties: 
     print county.text 
     print counties.index(county) 
+0

変更を加えましたが、 'counties'はまだ入力されていません。その他の考え?私は上記の投稿で自分のコードを更新しましたので、私はあなたのアドバイスを確実に守ることができます。 – SFarkas

0

郡のリストをcountiesにしたいとします。私の意見では、この問題は戻り値がdiv.find_all()で、多くても1つの郡の配列を返します。

counties = [] 
for div in target_divs: 
    county = div.find_all('div', class_= 'table_cell_county') 
    for c in county: 
     counties.append(c.text.encode('utf-8')) 

print counties # Returns: ['Autauga County', 'Baldwin County', 'Barbour County', 'Bibb County', 'Blount County', 'Bullock County', 'Butler County', 'Calhoun County', 'Chambers County', 'Chilton County', 'Choctaw County', 'Clarke County', 'Clay County', 'Coffee County', 'Colbert County', 'Conecuh County', 'Covington County', 'Crenshaw County', 'Cullman County', 'Dale County', 'Dallas County', 'Dekalb County', 'Elmore County', 'Escambia County', 'Etowah County', 'Greene County', 'Hale County', 'Henry County', 'Houston County', 'Jackson County', 'Jefferson County', 'Lauderdale County', 'Lee County', 'Limestone County', 'Lowndes County', 'Macon County', 'Madison County', 'Marengo County', 'Marion County', 'Marshall County', 'Mobile County', 'Monroe County', 'Montgomery County', 'Morgan County', 'Perry County', 'Pickens County', 'Pike County', 'Randolph County', 'Russell County', 'Saint Clair County', 'Shelby County', 'Sumter County', 'Talladega County', 'Tallapoosa County', 'Tuscaloosa County', 'Walker County', 'Wilcox County', 'Winston County'] 
print counties[0] # Returns: 'Autauga County' 
+0

それはそれでした!ありがとう@ルーツ!!! – SFarkas

+0

@SFarkas問題ありません!また、あなたがupvoteまたは答えとしてマークすることができる場合、それは他の人にも役立つだろう:) – root