2016-09-15 14 views
1

私はウェブサイトから中国語の文字でいくつかのデータを取得する次のコードを持っています。リストの理解と漢字の項目

import csv 
import requests 
from bs4 import BeautifulSoup 

url = "http://www.hkcpast.net/cpast_homepage/xyzbforms/BetMatchDetails.asp?tBetDate=2016/9/11" 

r = requests.get(url) 
soup = BeautifulSoup(r.content, "html.parser") 

for a in soup.find_all('html'): 
    a.decompose() 

list = [] 
for row in soup.find_all('tr'): 
    cols = row.find_all('td') 
    for col in cols: 
     if len(col) > 0: 
      list.append(col.text.encode('utf-8').strip()) 

は今のところ結果はこのようなものです:

[1, x, y, z, 2, x, y, z, 3, x, y, z] 

私の質問私は数(1、2、3、4によって分離されたリストから、いくつかのサブリストを作成したいです。。。、5 ...)

結果は次のようになりますように:

[1, x, y, z] 
[2, x, y, z] 
[3, x, y, z] 

本の最終的な目標は、各サブリストを書くことですcsvファイルの行として。最初にリストを各エントリに分けてから、csvファイルに書き込むことは意味がありますか?

+0

※1つの質問につきましては* 1つの問題に固執してください。あなたが説明している2つの問題はあまりにもあいまいではありません。おそらく最初のサンプル入力と期待される出力を提供することができますか?後者は単なるエンコードの問題です。データをUTF-8にエンコードしたので、出力やリスト表示の際に、出力に '\ xhh'バイト表現が表示されます。それは正常です。 –

+0

私はその質問を編集して、1つだけの質問が残るようにしました。特定の要件を持つリストからサブリストを作成するにはどうすればよいですか。 –

答えて

0

あなたのコードの逐語訳は次のようになります。しかし、私はあなたが実際にしたい疑う

list = [] 
for row in soup.find_all('tr'): 
    cols = row.find_all('td') 
    for col in cols: 
     if len(col) = 0: 
      continue # Save some indentation 
     txt = col.text.encode('utf-8').strip() 
     try: 
      _ = int(txt) 
      # txt is an int. Append new sub-list 
      list.append([txt]) 
     except ValueError: 
      # txt is not an int, append it to the end of previous sub-list 
      list[-1].append(txt) 

(最初のエントリがintでない場合、これは恐ろしく失敗することに注意してください!)

テーブルの各行に新しいサブリストを作成します。