#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Я пробую этот код с помощью beautifulsoup, но он дублирует результат снова и снова.
есть идеи, как использовать f.write с разными циклами for?
jobs_title = soup.find_all('td', class_='coljobtitle')
jobs_city = soup.find_all('td', class_='colcity')
jobs_type = soup.find_all('td', class_='colshorttextfield3')
filename = 'test.csv'
f = open(filename, 'w')
headers = 'Title, City, Type n'
f.write(headers)
for job in jobs_title:
name = job.find('a').text.strip()
# print(name)
for job2 in jobs_city:
city = job2.text.strip()
# print(city)
for job3 in jobs_type:
jobtype = job3.text.strip()
# print(jobtype)
f.write(name ',' city ',' jobtype 'n')
f.close()
Комментарии:
1. Я думаю, вам следует указать f.write еще одну вкладку. Я имею в виду, что он не находится в последнем цикле for, как
print(jobtype)
есть.2. пожалуйста, укажите три элемента списка и результат, который вы ожидаете, чтобы другие могли вам помочь
Ответ №1:
Это потому, что вы выполняете вложенные циклы. Что я бы сделал, так это взял родительский элемент этих трех элементов и перебрал их. В противном случае, предполагая, что эти списки имеют одинаковую длину, вы можете извлекать соответствующие элементы по значению индекса:
Другой вариант — использовать zip для объединения каждого соответствующего элемента, чтобы перебирать их вместе.
jobs_title = soup.find_all('td', class_='coljobtitle')
jobs_city = soup.find_all('td', class_='colcity')
jobs_type = soup.find_all('td', class_='colshorttextfield3')
filename = 'test.csv'
f = open(filename, 'w')
headers = 'Title, City, Type n'
f.write(headers)
for idx, job in enumerate(jobs_title):
name = job.find('a').text.strip()
# print(name)
city = jobs_city[idx].text.strip()
# print(city)
jobtype = jobs_type[idx].text.strip()
# print(jobtype)
f.write(name ',' city ',' jobtype 'n')
f.close()