python csvwriter выводит строки в отдельных строках, а не в одной строке

Прошло некоторое время, и я возвращаюсь к кодированию для исследовательского проекта, в настоящее время я делаю тренировочный сайт, чтобы увидеть, что мне нужно сделать для реального сайта.

У меня все работает так, как я хочу, но когда очищенные данные выводятся в csv, оно помещает значение в новую строку, а не в столбец рядом с той строкой, в которой оно должно было быть.

Я добавил ссылки на вывод ниже. Подскажите, что нужно изменить, а то я не могу понять.

      import csv, re
import requests 
from bs4 import BeautifulSoup

URL = "https://realpython.github.io/fake-jobs/"
page = requests.get(URL)
with open('testScraperEX.csv', 'w') as f:
    write = csv.writer(f)
    soup = BeautifulSoup(page.content, "html.parser")
    write.writerow(['Title', 'Company', 'Location'])
    results = soup.find(id="ResultsContainer")
    job_elements = results.find_all("div", class_="card-content")
    for job_element in job_elements:
        title_element = job_element.find("h2", class_="title")
        company_element = job_element.find("h3", class_="company")
        location_element = job_element.find("p", class_="location")
        Title = title_element.text.strip()
        Company = company_element.text.strip()
        Location = location_element.text.strip()
        write.writerows([[Title],[Company],[Location]])

Это текущий выход

Вот как я хочу, чтобы вывод был

Спасибо :)

1 ответ

      import csv
import requests 
from bs4 import BeautifulSoup

URL = "https://realpython.github.io/fake-jobs/"
page = requests.get(URL)
with open('testScraperEX.csv', 'w', newline='') as f:
    write = csv.writer(f)
    soup = BeautifulSoup(page.content, "html.parser")
    write.writerow(['Title', 'Company', 'Location'])
    results = soup.find(id="ResultsContainer")
    job_elements = results.find_all("div", class_="card-content")
    for job_element in job_elements:
        title_element = job_element.find("h2", class_="title")
        company_element = job_element.find("h3", class_="company")
        location_element = job_element.find("p", class_="location")
        Title = title_element.text.strip()
        Company = company_element.text.strip()
        Location = location_element.text.strip()
        write.writerow([Title, Company, Location])

вывод в файл csv:

      Title,Company,Location
Senior Python Developer,"Payne, Roberts and Davis","Stewartbury, AA"
Energy engineer,Vasquez-Davidson,"Christopherville, AA"
Legal executive,"Jackson, Chambers and Levy","Port Ericaburgh, AA"
Fitness centre manager,Savage-Bradley,"East Seanview, AP"
Product manager,Ramirez Inc,"North Jamieview, AP"
... and many more lines ...

Эта строка в вашем коде

      write.writerows([[Title],[Company],[Location]])

пишет 3 строки, потому что каждый элемент без необходимости находится внутри списка (т.е. у вас есть список из 3-х одноэлементных списков). Этот

      write.writerow([Title, Company, Location]) 

пишет одну строку - список из 3-х элементов.

Примечание wrte.writerowsпротив write.writerowа также [[Title],[Company],[Location]]против [Title, Company, Location]

Другие вопросы по тегам