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