2016-03-21 15 views
1

Lil Wayne makaleleri için Google'da arama yapan bir komut dosyası var ve daha sonra - her makale için - başlık, özet, URL ve anahtar kelimeleri döndürür.Python3: Bir CSV dosyasındaki kısa komut dosyasından bilgi nasıl saklanır?

Ancak, TITLE, SUMMARY, URL, KEYWORDS sütunları olan ve her satırdaki her bir makaleyle ilgili bilgileri saklayan bir CSV dosyası oluşturmak isterim.

from newspaper import Article 
import google 

#Search Setup 
for url in google.search('Lil Wayne', num=10, stop=3, pause=0): 
    article = Article(url)  
    article.download() 
    article.parse() 
    article.nlp()  


    #Print the parsed output of each article 
    print(u'TITLE: ' + str(article.title.encode('ascii', 'ignore'))) 
    print(u'SUMMARY: ' + str(article.summary.encode('ascii', 'ignore'))) 
    print(u'URL: ' + str(article.url)) 
    print(u'KEYWORDS: ' + str(article.keywords)) 
    print("\n") 
+0

bu aslında Python 3 mi? Python 3 metin dizesi değişmezleri üzerinde 'u' önekine gerek duymaz ve str (article.title.encode ('ascii', 'ignore')) 'komik davranırdı (' str ' 'bytes' nesnesi 'encode' döndürür. – ShadowRanger

+0

Her halükarda, ['csv' modül belgelerini] gerçekten kontrol etmenizi öneririm (https://docs.python.org/3/library/csv.html); Bu çoğunlukla boilerplate ve orada başlamanız gereken örnekler var. – ShadowRanger

+0

Merhaba, Evet, aslında bunu python 2'de yazdım ve kod çözme işlemini halleddiğime eminim. 'UnicodeDecodeError: 'utf-8' codec'i pozisyonunda 170 yılında byte 0x81 deşifre edemez: Sonunda aşağıdaki hatayı alıyorum geçersiz başlangıç ​​ byte' bununla kadar ne biliyor musunuz? – thewhitetie

cevap

2

Kodunuzdaki böyle bir şey kullanabilirsiniz:

from newspaper import Article 
import google 

with open('output_file.csv', 'wb') as csvfile: 
    lil_wayne_writer = csv.writer(csvfile) 

    #Search Setup 
    for url in google.search('Lil Wayne', num=10, stop=3, pause=0): 
     article = Article(url)  
     article.download() 
     article.parse() 
     article.nlp() 
     lil_wayne_writer.writerow(
      [ 
       str(article.title.encode('ascii', 'ignore')), 
       str(article.summary.encode('ascii', 'ignore')), 
       str(article.url), 
       str(article.keywords), 
      ] 
     ) 

Bu temelde bir makale bulmak olarak daha sonra her satır yazar, bir csv yazar açar. Hakkında daha fazla bilgi almak için , in the python docs

Ortamınızda düzgün çalışması için biraz düzenlemeniz gerekebilir.

basitçe, CSV dosyası içine başlıklarını yazmak böyle bir şey tek bir çağrı eklemek isterseniz:

lil_wayne_writer.writerow(['TITLE', 'SUMMARY', 'URL', 'KEYWORDS']) 
+1

Bunun gerçekten Py3 olduğunu varsayarak, 'str' öğesine 'decode' (ya da 'str' yapıcısına ikinci bir argümanı iletmek); Aksi takdirde, bytes 'nesnesinin 'repr' değerini alırsınız. Yani str (article.title.encode ('ascii', 'ignore')), 'str (article.title.encode ('ascii', 'ignore'), 'ascii'),' veya article.title.encode ('ascii', 'yoksay') decode ('ascii'), '. Ayrıca, çıktı dosyasını 'open ('output_file.csv', 'w', newline = '')' 'newline' olmadan' wb '' ile açmanız gerekir; Py3 'csv' modülü' str' tabanlı, bayt tabanlı değil. – ShadowRanger

+0

Teşekkürler @ShadowRanger - Python3 pirzemleri :) geliştirmek için bu seçenekleri araştırma listeme ekleyeceğim. – srowland

İlgili konular