Преобразовать веб-список очищенных строк в форматированный CSV - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь создать небольшой скрипт для очистки веб-данных с веб-сайта и сохранения результатов в формате CSV.

До сих пор я использовал BeautifulSoup и смог получить нужные мне данные.веб-сайт, закодируйте его так, чтобы он мог быть сохранен в CSV, но он в длинной строке с нелогичным форматированием (что я вижу), и я пытаюсь выяснить, как его преобразовать.

Код:# import библиотеки import urllib2 из bs4 import BeautifulSoup

import csv
from datetime import datetime

# specify the url
quote_page = 'url'

# query the website and return the html to the variable 'page'
page = urllib2.urlopen(quote_page)

# parse the html using beautiful soup and store in variable 'soup'
soup = BeautifulSoup(page, 'html.parser')

# Take out the <div> of name and get its value
name_box = soup.find('ul', attrs={'id': 'list-store-detail'})

name = name_box.text.strip() # strip() is used to remove starting and trailing
print name

# open a csv file with append, so old data will not be erased
with open('index.csv', 'a') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow([name.encode('utf-8')])

Текущий вывод:

Name 
Address 1
Address 2
Country
Name + Address
Phone Number
Street View
Direction







Name 
Address 1
Address 2
Country
Name + Address
Phone Number
Street View
Direction

Желаемый вывод:

Как вы можете видеть тамэто большой пробел между ними, и из того, что я могу сказать, на самом деле нет \ n \ r.

Я предполагаю, что мне придется каким-то образом разбить строку на строки для циклаи затем правильно отформатировать его в CSV?

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 11 декабря 2018

Ваши предположения верны!Вероятно, есть более эффективный способ сделать это, но для этого требуется очень мало изменений кода.

Разделить строку, используя

split_name = name.split("\n")

Избавиться от пустоголинии

no_blanks = [ x for x in split_name if len(x) > 0 ]

Запись в CSV

with open('index.csv', 'a') as csv_file:
writer = csv.writer(csv_file)
line = []
for i in range(len(no_blanks)):
    line.append(no_blanks[I].strip())
    if len(line) == 8:
        writer.writerow(line)
        line = []

Вывод

Name,Address 1,Address 2,Country,Name + Address,Phone Number,Street View,Direction Name,Address 1,Address 2,Country,Name + Address,Phone Number,Street View,Direction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...