Der Versuch, ein Data Miner zu machen, ich habe alle Urls in einem Array, aber wenn ich versuche, auf dem Schaber zu nehmen, gibt mir diese Fehlermeldung:Typeerror: Liste Indizes müssen ganze Zahlen sein, nicht Tag - Python
$TypeError: list indices must be integers, not Tag -- python
das ist mein voller Code für den Scraper:
s = sched.scheduler(time.time, time.sleep)
def myScraper(sc):
csv_f = csv.reader(f)
quote_page = []
for row in csv_f:
quote_page.append(url+row[0])
i=1
for var in quote_page:
num_dat = []
txt_dat = []
num_dat2 = []
txt_dat2 = []
s.enter(5,1,myScraper, (sc,))
sleep(5)
print(quote_page[i])
page = urlopen(quote_page[i])
i = i+1
soup = BeautifulSoup(page, 'html.parser')
data_store = []
for tr in soup.find_all('tr'): # find table rows
tds = tr.find_all('td', attrs={'class': 'fieldData'}) # find all table cells
for i in tds: # returns all cells from html rows
if i != []: # pops out empty cells from returned data
data_store.append(i.text)
#print(i.text)
#print("\n")
data_store2 = []
for tr in soup.find_all('tr'):
tds2 = tr.find_all('td', attrs={'class': 'improvementsFieldData'})
for i in tds2:
if i != []:
data_store2.append(i.text)
for j in data_store:
if ',' in j and ' ' not in j:
lft_dec = j[:j.index(',')].replace('$', '')
rght_dec = j[j.index(','):].replace(',', '') # drop the decimal
num_dat.append(float(lft_dec+rght_dec)) # convert to numerical data
else:
txt_dat.append(j)
for j in data_store2:
if ',' in j and ' ' not in j:
lft_dec = j[:j.index(',')].replace('$', '')
rght_dec = j[j.index(','):].replace(',', '').replace('Sq. Ft', '') # drop the decimal and Sq
num_dat2.append(float(lft_dec+rght_dec)) # convert to numerical data
elif ('Sq. Ft' and ',') in j:
sqft_dat_befcm = j[:j.index(',')].replace(',', '')
sqft_dat_afcm = j[j.index(','):].replace(' ', '').replace('Sq.Ft', '').replace(',', '')
num_dat2.append(float(sqft_dat_befcm+sqft_dat_afcm))
else:
txt_dat2.append(j)
print(num_dat)
print(txt_dat)
print(num_dat2)
print(txt_dat2)
s.enter(5, 1, myScraper, (s,))
s.run()
f.close
Grundsätzlich ist mein Ziel für dieses Programm ist eine Reihe von URLs kann ich einen Browser abkratzen die ersten dann wartet für ein Intervall Menge an Zeit und Wiederholung öffne gegeben bis das Array fertig ist.
EDIT *** Leider erstes Mal auf diesem Posting. Hier ist die vollständige stacktrace
Traceback (most recent call last):
File "C:\Users\Ahmad\Desktop\HouseProject\AhmadsScraper.py", line 85, in
<module>
s.run()
File "C:\Users\Ahmad\Anaconda2\lib\sched.py", line 117, in run
action(*argument)
File "C:\Users\Ahmad\Desktop\HouseProject\AhmadsScraper.py", line 32, in
myScraper
print(quote_page[i])
TypeError: list indices must be integers, not Tag
Können Sie bitte die vollständige Traceback bieten? So kann man verstehen, welche Zeile den Fehler wirft? –
Ja, definitiv! Danke für die Antwort! – Matherz