Есть ли способ выбрать столбец для .writerow? - PullRequest
0 голосов
/ 23 марта 2019

Я хочу очистить сайт и сохранить данные в файле csv , который можно открыть в Excel.Мне удалось получить информацию, но у меня возникли проблемы с переносом ее в документ csv .Когда я открываю документ, заголовки находятся там и находятся в разных столбцах, но фактическое содержимое находится в одном и том же: имя первый и цена второй.

Я попытался поставить file.writerow([Name, Price]) в конце кода, но, вероятно, потому что я использовал span.find для name , отображается только значение фамилии.Я подумал, file.writerow должен быть в цикле, чтобы работать, но я не могу переместить данные в другой столбец.

Вот код:

import requests
from bs4 import BeautifulSoup
import csv

file = csv.writer(open('GPU.csv', 'w'))
file.writerow(['Name','Price'])

url = 'link'

page = requests.get(url)

soup = BeautifulSoup(page.text,'html.parser')

for span in soup.findAll('span', attrs={'class':'details'}):
    name = span.find('a').string
    file.writerow([name])

for span in soup.findAll('span', attrs={'class':'price'}):
    price = span.findAll(text=True)
    file.writerow([price])

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

1 Ответ

0 голосов
/ 23 марта 2019

Модуль csv всегда пишет только последовательно. Тем не менее, вы можете собрать name s и prices в отдельные списки заранее, а затем использовать функцию zip() для их перебора по парам, например:

import requests
from bs4 import BeautifulSoup
import csv

url = "link"

page = requests.get(url)

soup = BeautifulSoup(page.text, "html.parser")

names = []
prices = []

for span in soup.findAll("span", attrs={"class": "details"}):
    names.append(span.find("a").string)

for span in soup.findAll("span", attrs={"class": "price"}):
    prices.append(span.findAll(text=True))

file = csv.writer(open("GPU.csv", "w"))
file.writerow(["Name", "Price"])

for name, price in zip(names, prices):
    file.writerow([name, price])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...