2017-08-03 30 views
5

मेरे पास एक पर्यटक साइट से समीक्षाओं को स्क्रैप करने और एक्सेल फ़ाइल में स्टोर करने की एक सरल परियोजना है। समीक्षा स्पेनिश, जापानी या किसी अन्य भाषा में हो सकती है, समीक्षाओं में कभी-कभी "❤❤" जैसे विशेष प्रतीक होते हैं।गैर-अंग्रेज़ी स्ट्रिंग को एक्सेल फ़ाइल में कैसे संग्रहीत करें, python3?

मुझे सभी डेटा स्टोर करने की आवश्यकता है (यदि विशेष रूप से लिखा नहीं जा सकता है तो विशेष प्रतीकों को बाहर रखा जा सकता है)।

मैं डेटा मैं चाहता स्क्रैप और कंसोल में इसे प्रिंट के रूप में यह (जापानी पाठ की तरह) है, लेकिन समस्या यह csv फ़ाइल में भंडारण के साथ है करने में सक्षम हूँ, यह के रूप में

नीचे दिखाया गया त्रुटि संदेश दिखा है

मैंने यूटीएफ -8 एन्कोडिंग के साथ फ़ाइल खोलने का प्रयास किया (जैसा कि नीचे टिप्पणी में उल्लिखित है) लेकिन फिर यह कुछ अजीब प्रतीकों में डेटा सहेजता है जो नहीं समझता .... और समस्या का उत्तर नहीं मिला। कोई सुझाव।

मैं अजगर के लिए अजगर 3.5.3

मेरे कोड का उपयोग कर रहा:

from selenium import webdriver 
from bs4 import BeautifulSoup 
import time 
import re 

file = "TajMahalSpanish.csv" 
f = open(file, "w") 
headers = "rating, title, review\n" 
f.write(headers) 

pages = 119 
pageNumber = 2 
option = webdriver.ChromeOptions() 
option.add_argument("--incognito") 

browser = webdriver.Chrome(executable_path='C:\Program Files\JetBrains\PyCharm Community Edition 2017.1.5\chrome webdriver\chromedriver', chrome_options=option) 

browser.get("https://www.tripadvisor.in/Attraction_Review-g297683-d317329-Reviews-Taj_Mahal-Agra_Agra_District_Uttar_Pradesh.html") 
time.sleep(10) 
browser.find_element_by_xpath('//*[@id="taplc_location_review_filter_controls_0_form"]/div[4]/ul/li[5]/a').click() 
time.sleep(5) 
browser.find_element_by_xpath('//*[@id="BODY_BLOCK_JQUERY_REFLOW"]/span/div[1]/div/form/ul/li[2]/label').click() 
time.sleep(5) 

while (pages): 
    html = browser.page_source 
    soup = BeautifulSoup(html, "html.parser") 
    containers = soup.find_all("div",{"class":"innerBubble"}) 

    showMore = soup.find("span", {"onclick": "widgetEvCall('handlers.clickExpand',event,this);"}) 
    if showMore: 
     browser.find_element_by_xpath("//span[@onclick=\"widgetEvCall('handlers.clickExpand',event,this);\"]").click() 
     time.sleep(3) 
     html = browser.page_source 
     soup = BeautifulSoup(html, "html.parser") 
     containers = soup.find_all("div", {"class": "innerBubble"}) 
     showMore = False 

    for container in containers: 
     bubble = container.div.div.span["class"][1] 
     title = container.div.find("div", {"class": "quote"}).a.span.text 
     review = container.find("p", {"class": "partial_entry"}).text 
     f.write(bubble + "," + title.replace(",", "|").replace("\n", "...") + "," + review.replace(",", "|").replace("\n", "...") + "\n") 
     print(bubble) 
     print(title) 
     print(review) 
    browser.find_element_by_xpath("//div[@class='ppr_rup ppr_priv_location_reviews_list']//div[@class='pageNumbers']/span[@data-page-number='" + str(pageNumber) + "']").click() 
    time.sleep(5) 
    pages -= 1 
    pageNumber += 1 

f.close() 

मैं निम्न त्रुटि हो रही है:

Traceback (most recent call last): 
    File "C:/Users/Akshit/Documents/pycharmProjects/spanish.py", line 45, in <module> 
    f.write(bubble + "," + title.replace(",", "|").replace("\n", "...") + "," + review.replace(",", "|").replace("\n", "...") + "\n") 
    File "C:\Users\Akshit\AppData\Local\Programs\Python\Python35\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 10-18: character maps to <undefined> 

Process finished with exit code 1 

अद्यतन

मैं इस समस्या के लिए एक समाधान की कोशिश कर रहा हूँ। अंत में मुझे जापानी समीक्षाओं को अंग्रेजी के साथ-साथ शोध के लिए अनुवाद करने की आवश्यकता है, इसलिए हो सकता है कि मैं इसे लिखने से पहले कोड में स्ट्रिंग को ट्रांस्लेट करने के लिए Google एपीआई में से एक का उपयोग कर सकूं और फिर इसे सीएसवी फ़ाइल में लिख सकूं .. ..

+1

(, फ़ाइल, "डब्ल्यू" एन्कोडिंग = 'utf-8') की कोशिश 'च = खुला'। एक साइड-नोट पर, संदर्भ प्रबंधक के साथ फाइलें खोलना रोबस्टर है, और मैं प्रोग्राम के विभिन्न हिस्सों को अलग-अलग कार्यों में अलग करता हूं (सामग्री प्राप्त करना, सामग्री को स्क्रैप करना, परिणामों को लिखना) –

+1

संभावित डुप्लिकेट [हैंडलिंग गैर- पाइथन का उपयोग करते हुए एक सीएसवी में मानक अमेरिकी अंग्रेजी वर्ण और प्रतीक] (https://stackoverflow.com/questions/12357261/handling-non- मानक- अमेरिकन- अंग्रेजी-characters-and-symbols-in-a-csv-using- पीई) – JeffC

+0

@ मार्टिनफैब्रे जो त्रुटि को हटा देता है लेकिन वास्तव में यह फ़ाइल में एक ही चीज़ को प्रिंट नहीं कर रहा है .... उदाहरण के लिए इसे प्रिंट चाहिए ** "美 し い 幾何学 模 様!" ** बल्कि यह प्रिंट है ** "美ã-ए" å¹¾ä½ • å|模æ§~ï¼ "** –

उत्तर

0

अद्यतन

मिले

Is it possible to force Excel recognize UTF-8 CSV files automatically?

में समाधान के रूप में टिप्पणी में @ MaartenFabré ने सुझाव दिया।

मूल रूप से जो मैंने समझा, उससे समस्या यह है कि एक्सेल फ़ाइल को utf-8 एन्कोडिंग के साथ सीएसवी फ़ाइल पढ़ने में समस्याएं हैं, इसलिए जब मैं सीधे सीएसवी फ़ाइल (पायथन के माध्यम से बनाया जाता है) एक्सेल के साथ खोलता हूं ... सभी डेटा दूषित हो जाता है ।

  1. मैं डेटा एक पाठ फ़ाइल में, csv के बजाय अजगर
  2. ओपन एक्सेल
  3. जाओ बाहरी डेटा आयात करने के लिए और आयात में एक txt फ़ाइल
  4. का उपयोग कर बचाया:

    समाधान है

  5. फ़ाइल प्रकार का चयन "डिलीमिट" और फ़ाइल उत्पत्ति के रूप में "650001: यूनिकोड (utf-8)"
  6. "," डिलीमीटर (अपनी पसंद) के रूप में चुनें और आयात करें
  7. डेटा को प्रत्येक भाषा के लिए उचित पंक्तियों और कॉलम में एक्सेल में सही ढंग से दिखाया गया है ... जैपेनीज़, स्पैनिश, फ्रेंच इत्यादि

मदद के लिए @MartenFabre को फिर से धन्यवाद!

संबंधित मुद्दे