複数のアイテムが1つのセルに含まれているテーブルをダウンロードしようとしています。 私は三つの問題得る:ウェブスクレイピングでセル内に複数の行が表示される
- トラックリスト列が正しく生成されていない(次の行のヘッダに記述されたように(他のデータ型と同じ行をotのinstedされる)];最後内
- 曲コラム(トラックリスト)一つのセルに埋め込まれていないと私は書式設定複数行を取り除くための方法を見つけることができませんでした。
ダウンロードがエラー
"UnicodeEncodeError: 'charmap' codec can't encode character '\x91' in position 2886: character maps to < undefined >"
のために1990年に停止し、私はいくつかの答えを見つけましたしかし、私 依然として問題を確実に解決する方法を理解することはできません。私は昨日同じ問題を抱えていました。オンラインで読むと、システムによって認識されない奇妙なキャラクターが含まれているようです。問題を確実に解決する方法はありませんか(私はCSVをエクセル用にエクスポートします)。 (私は@Anuragからの提案を試みた後に)
これはコードである:
import codecs
import urllib
import urllib.request
from bs4 import BeautifulSoup
from urllib.request import urlopen as uReq
import unicodecsv as csv
years = list(range(1965,2016))
for year in years:
my_urls = ('http://www.hitparadeitalia.it/hp_yenda/lpe' + str(year) + '.htm',)
my_url = my_urls[0]
for my_url in my_urls:
uClient = uReq(my_url)
html_input = uClient.read()
uClient.close()
page_soup = BeautifulSoup(html_input, "html.parser")
[s.extract() for s in page_soup('script')]
filename = "ALBUM" + str(year) + ".csv"
f = open(filename, "w")
headers = "NN, album, interprete, etichetta, mass, tracklist" + "/n"
f.write(headers)
containers = page_soup.findAll("table", {"class":"piccolo"})
containerr = containers[0].findAll("tr")
container = containerr[0]
for container in containerr:
items = container.findAll("td")
NN = items[0].text
album = items[1].text
interprete = items[2].text
etichetta = items[3].text
mass = items[4].text
tracklist = items[5].text.strip()
print("NN: " + NN)
print("album: " + album)
print("interprete: " + interprete)
print("etichetta: " + etichetta)
print("mass: " + mass)
print("tracklist: " + tracklist)
f.write(NN + "," + album + "," + interprete + "," + etichetta + "," + mass + "," + tracklist + "\n")
f.close()
I印刷機能出力から参照:最初の行が正しくによって生成さ
- 各列タイトルにデータを添付する。
- 2行目以降は、次の行のすべてのテキストをスローするよりも、トラックリストの列まで機能し、同じ、間違った、繰り返しを繰り返すことで次の行から再開します。
この問題を理解する最も良い方法は、コードを実行し、出力を表示することです(スクロールすると、繰り返しの問題をクリアする必要があります)。
utf-8を取得するためにcsvに通知する必要があるため、うまくいきません。別の投稿に示唆されているように、私はf = open(ファイル名、 "w"、 "utf-8")を試しましたが、うまくいきません。 –
'python2。+'を使用している場合は、 'ascii'に偶然エンコードするスタイル –
私はPython 3を使用しています –