2014-11-29 1 views
0

Я пытаюсь создать веб-искатель. В настоящее время я просто тестирую его на Youtube, но я намерен расширить его, чтобы сделать это позже. Пока я все еще учусь.Python соскабливание и вывод на excel

В настоящее время я пытаюсь экспортировать информацию в csv, код ниже - это то, что у меня есть на данный момент, и казалось, что он отлично работает, когда я запускал его, чтобы вытащить описания названий. Однако, когда я добавил в код, чтобы получить «представления» и «любит», он испортил выходной файл, потому что в них есть запятые.

Кто-нибудь знает, что я могу сделать, чтобы обойти это?

import urllib2 
import __builtin__ 
from selenium import webdriver 
from selenium.common.exceptions import NoSuchAttributeException 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 
import time 
from time import sleep 
from random import randint 
from lxml import etree 

browser = webdriver.Firefox() 
time.sleep(2) 
browser.get("https://www.youtube.com/results?search_query=funny") 
time.sleep(2) 
browser.find_element_by_xpath("//*[@id='section-list']/li/ol/li[1]/div/div/div[2]/h3/a").click() 
time.sleep(2) 
url = browser.current_url 
title = browser.find_element_by_xpath("//*[@id='eow-title']").text 
views = browser.find_element_by_xpath("//*[@id='watch7-views-info']/div[1]").text 
likes = browser.find_element_by_xpath("//*[@id='watch-like']/span").text 
dislikes = browser.find_element_by_xpath("//*[@id='watch-dislike']/span").text 
tf = 'textfile.csv' 
f2 = open(tf, 'a+') 
f2.write(', '.join([data.encode('utf-8') for data in [url]]) + ',') 
f2.write(', '.join([data.encode('utf-8') for data in [title]]) + ',') 
f2.write(', '.join([data.encode('utf-8') for data in [views]]) + ',') 
f2.write(', '.join([data.encode('utf-8') for data in [likes]]) + ',') 
f2.write(', '.join([data.encode('utf-8') for data in [dislikes]]) + '\n') 
f2.close() 
+0

У Python есть модуль под названием 'csv', чтобы обеспечить удобный интерфейс для чтения и записи в CSV-файлы. –

+0

Не могли бы вы дать мне пример того, как я могу использовать это с тем, что я создал? Я пытался использовать это раньше, но я не мог справиться с этим. Было бы очень признательно. Благодаря! – BubblewrapBeast

ответ

1

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

После того, как у Вас есть свой views, likes и dislikes как строки, вы можете выполнить операцию, как следующее, чтобы избавиться от запятых:

likes = "3,141,592" 
likes = likes.replace(',', '') # likes is now: "3141592" 
likes = int(likes) # likes is now an actual integer, not just a string 

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

Наконец, хорошие примеры того, как использовать модуль csv, можно найти в Интернете. Я мог бы предложить один из Python Module of the Week. Если вы поймете примеры, вы сможете изменить свой код, чтобы использовать этот высокоэффективный модуль.

0

Вам не нужно писать собственный формат csv самостоятельно. Используйте https://docs.python.org/2/library/csv.html.

пример кода:

stringio = StringIO.StringIO() 
csv_writer = csv.writer(stringio) 
csv_writer.writerow([data.encode('utf-8') for data in [url]]) 
csv_writer.writerow([data.encode('utf-8') for data in [title]]) 
csv_writer.writerow([data.encode('utf-8') for data in [views]]) 
csv_writer.writerow([data.encode('utf-8') for data in [likes]]) 
csv_writer.writerow([data.encode('utf-8') for data in [dislikes]]) 
with open('textfile.csv') as fp: 
    fp.write(stringio.getvalue()) 

Я не могу понять цель [data.encode('utf-8') for data in [url]] или вы имеете в виду:

csv_writer.writerow([data.encode('utf-8') for data in [url, title, views, likes, dislikes]]) 

вы также можете попробовать csv.writer(open('textfile.csv', 'a+')) без записи в буфер строк.