Вы можете избежать вызова iloc и использовать вместо него iterrows
, и я думаю, что вам придется использовать loc
вместо iloc
, потому что вы работали с индексом, но используете iloc
и loc
впетли, как правило, не так эффективны.Вы можете попробовать следующий код (с указанием времени ожидания):
import time
info = pd.read_csv('labeled_urls.tsv',sep='\t',header=None)
html, category = [], []
for i, row in info.iterrows():
url= row.iloc[0]
time.sleep(2.5) # wait 2.5 seconds
response = requests.get(url) # you can use row[columnname] instead here as well (i only use iloc, because I don't know the column names)
soup = BeautifulSoup(response.text, 'html.parser')
html.append([re.sub(r'<.*?>','',
str(soup.findAll(['p','h1','\href="/avtorji/'])))])
# the following iloc was probably raising the error, because you access the ith column in the first row of your df
# category.append(info.iloc[0,i])
category.append(row.iloc[0]) # not sure which field you wanted to access here, you should also replace it by row['name']
data = pd.DataFrame()
data['html'] = html
data['category'] = category
Если вам действительно нужен только URL в вашем цикле, вы должны заменить:
for i, row in info.iterrows():
url= row.iloc[0]
на что-то вроде:
for url in info[put_the_name_of_the_url_column_here]: # or info.iloc[:,0] as proposed by serge