Как записать в файл из разных циклов for в один f.напишите

#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()