2017-06-29 89 views
6

Stworzyłem skrypt, który przechwytuje witrynę: 1688.com i problem jest, witryna jest po chińsku, więc za każdym razem, gdy próbuję odzyskać tekst, daje mi to mnóstwo unicode i kiedy Eksportuję do pliku CSV, w pliku nie ma nic. Mój kod:Nie można odzyskać chińskich tekstów podczas skrobania

# -*- coding: utf-8 -*- 
import csv 
from urllib import urlopen 
from bs4 import BeautifulSoup as BS 

csv_content = open('content.csv', 'w+') 
writer_content = csv.writer(csv_content) 

url = urlopen('https://fuzhuang.1688.com/nvzhuang? 
spm=a260k.635.1998214976.1.7eqUGT') 
html = BS(url, 'lxml') 
container = html.find('ul', {'class' : 'ch-box fd-clr'}) 
offers = container.find_all('div', {'class' : 'ch-offer-body'}) 
lst = [] 

for offer in offers: 
    offer_box = offer.find('div', {'component-name' : '@alife/ocms- 
component-1688-pc-ch-offer-pic'}) 
    images = offer_box.find('img')['src'] 
    title = offer.find('div', {'class' : 'ocms-component-1688-pc-ch-offer- 
title-0-1-11'}).text 
    price = offer.find('div', {'class' : 'ocms-component-1688-pc-ch-offer- 
price-0-1-14'}).text 
    lst.append(price) 

dla elementu LST: writer_content.writerow ([Pozycja])

print lst 

Wyjście jest

[u'\n\n\n\xa5\n109.00\n\n\n\u6210\u4ea4\n329\n\u4ef6\n\n\n', u'\n\n\n\xa5\n56.00\n\n\n\u6210\u4ea4\n195\n\u4ef6\n\n\n', u'\n\n\n\xa5\n83.00\n\n\n\u6210\u4ea4\n109\n\u4ef6\n\n\n', u'\n\n\n\xa5\n69.00\n\n\n\u6210\u4ea4\n208\n\u4ef6\n\n\n', u'\n\n\n\xa5\n46.00\n\n\n\u6210\u4ea4\n204\n\u4ef6\n\n\n', u'\n\n\n\xa5\n45.00\n\n\n\u6210\u4ea4\n54\n\u4ef6\n\n\n', u'\n\n\n\xa5\n82.00\n\n\n\u6210\u4ea4\n38\n\u4ef6\n\n\n', u'\n\n\n\xa5\n48.90\n\n\n\u6210\u4ea4\n318\n\u4ef6\n\n\n'] 

i mam już wypróbowany kodowanie i dekodowanie utf-8, naprawdę byłbym wdzięczny, gdybyś mi pokazał, jak rozwiązać ten problem.

+0

Jeśli to cały twój kod, musisz napisać do Twój plik CSV z np. 'writer_content.writerow'. Zobacz https://docs.python.org/2/library/csv.html#writer-objects – bblack

+0

Już próbowałem, ale zapomniałem umieścić tę linię w kodzie powyżej –

+0

Możesz edytować odpowiedź i umieścić ją –

Odpowiedz

4

ten kod uratuje chińskie symbole txt:

dla Python3:

  ... 
(all your code above) 
for i in range(len(lst)):  
    lst[i]=lst[i].replace('\n','') #getting rig of `'\n'` newlines 

piśmie do txt:

with open(r'C:\Users\Username\list.txt','w',newline='',encoding='utf-8-sig') as f: 
    for i in lst: 
     f.write(i+'\t') 

dla python2:

import unicodecsv as ucsv 
with open(r'C:\Users\Username\list1.txt','wb') as f: 
    w = ucsv.writer(f,encoding='utf-8-sig') 
    for i in lst: 
     w.writerow([i+'\t']) 
+0

kiedy próbuję twojego rozwiązania, jest błąd, który mówi: TypeError: 'encoding' jest nieprawidłowym argumentem słowa kluczowego dla tej funkcji , a funkcja przyjmuje tylko 3 argumenty (4 podane) –

+0

to dlatego, że jesteś przy użyciu Pythona 2, początkowo wysłałem rozwiązanie dla Pythona 3. Dodano opcję dla python2. –

+0

@ V.Anh, czy moja aktualizacja pomogła? –