2017-06-29 29 views
6

Tôi đã tạo một tập lệnh để xóa trang web: 1688.com và vấn đề là trang web bằng tiếng Trung nên bất cứ khi nào tôi cố gắng truy xuất văn bản, nó mang lại cho tôi tôi xuất sang tệp CSV, không có gì trong tệp. Mã của tôi:Không thể truy xuất văn bản tiếng Trung trong khi cạo

# -*- 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) 

cho mặt hàng trong lst: writer_content.writerow ([item])

print lst 

Đầu ra là

[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'] 

Và tôi đã cố gắng mã hóa và giải mã utf-8, tôi thực sự sẽ đánh giá cao nếu bạn chỉ cho tôi cách giải quyết vấn đề này.

+0

Nếu đó là toàn bộ mã của bạn, sau đó bạn cần phải viết thư tệp csv của bạn với ví dụ: 'writer_content.writerow'. Xem https://docs.python.org/2/library/csv.html#writer-objects – bblack

+0

Tôi đã thử nó nhưng tôi quên đặt dòng đó trong mã ở trên –

+0

Bạn có thể chỉnh sửa câu trả lời và đặt nó –

Trả lời

4

mã này sẽ tiết kiệm được những biểu tượng của Trung Quốc để txt:

cho Python3:

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

bằng văn bản cho 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') 

cho 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

khi tôi thử giải pháp của bạn, có lỗi xảy ra LoạiError: 'encoding' là đối số từ khóa không hợp lệ cho hàm này và hàm chỉ mất 3 đối số (4 Given) –

+0

. sử dụng python 2, ban đầu tôi đã đăng giải pháp cho python 3. Thêm tùy chọn cho python2. –

+0

@ V.Anh, bản cập nhật của tôi có trợ giúp không? –

Các vấn đề liên quan