2016-08-30 27 views
1

BeautifulSoup .find関数で得られた文字列に改行文字が隠されているように見えることがありました。私はhtmlドキュメントをスキャンし、名前、タイトル、会社、国を文字列として取り出すコードです。私はチェックを入れて、それが文字列であることを見て、それらを印刷してその長さをチェックすると、すべてが正常な文字列であるように見えます。しかし、私がprint("%s is a %s at %s in %s" % (name,title,company,country))またはoutputWriter.writerow([name,title,company,country])のいずれかでそれらを使用してcsvファイルに書き込むと、文字列に表示されない余分な改行が得られます。BeautifulSoup文字列に不要な改行を追加するPython3.5

何が起こっているのですか?あるいは、誰かが正しい方向に私を向けることができますか?

私はPythonには新しく、わからないことをすべて調べる場所がわからないので、問題を解決しようと一日中過ごした後、ここで質問しています。私はGoogleといくつかの他のスタックオーバーフローの記事を隠し文字を削除して検索しましたが、何も動作していないようです。

outputWriter.writerow([name.strip(),title.strip(),company.strip(),country.strip()]) 

はあなたが確認することができますそこにどのような私たちを見て:あなたはストリップ空白に必要なほとんどの

import csv 
from bs4 import BeautifulSoup 

# Open/create csvfile and prep for writing 
csvFile = open("attendees.csv", 'w+', encoding='utf-8') 
outputWriter = csv.writer(csvFile) 

# Open HTML and Prep BeautifulSoup 
html = open('WEB SUMMIT _ LISBON 2016 _ Web Summit Featured Attendees.html', 'r', encoding='utf-8') 
bsObj = BeautifulSoup(html.read(), 'html.parser') 
itemList = bsObj.find_all("li", {"class":"item"}) 

outputWriter.writerow(['Name','Title','Company','Country']) 

for item in itemList: 
    name = item.find("h4").get_text() 
    print(type(name)) 
    title = item.find("strong").get_text() 
    print(type(title)) 
    company = item.find_all("span")[1].get_text() 
    print(type(company)) 
    country = item.find_all("span")[2].get_text() 
    print(type(country)) 
    print("%s is a %s at %s in %s" % (name,title,company,country)) 
    outputWriter.writerow([name,title,company,country]) 
+0

私はもう1つのフィルタを試して問題を解決しました。 def filter_non_printable(str): return '' .join(ord(c)> 31またはord(c)== 9の場合はstrの[cの場合はc) – gsears

答えて

0

、それがなければならないので、それを追加し、あなたのコード内では何もありませんのrepr outpout:あなたプリント

print("%r is a %r at %r in %r" % (name,title,company,country)) 

改行が実際に文字列から外れ体内に埋め込まれている場合

In [8]: s = "string with newline\n" 

In [9]: print(s) 
string with newline 


In [10]: print("%r" % s) 
'string with newline\n' 

difference-between-str-and-repr-in-python

、あなたがする必要があります:あなたはそれを実現しないかもしれない改行がある場合があるので、uがstrの出力を参照してくださいreplace ie name.replace("\n", " ")

+0

ありがとう!最後のコメントで悲しいことにもう一度解決策を試してみると、うまくいきました。私はまだ、すべてのものやさよならについてはまだ分かりませんが、ゆっくりと学んでいます。再度、感謝します! – gsears

関連する問題