str()を呼び出すときに、どのようにして空白文字を追加しないようにしますか?私はurllib.requestを使用するスクリーンスクレーパー/ Webクローラーを持っています。私は私のコンテンツでstr()を呼び出しています。 ここに私のコードです。str()メソッドは空白文字を追加します
req = urllib.request.Request(national_url, headers={'User-Agent' : "Magic Browser"})
con = urllib.request.urlopen(req)
#grab html
html = con.read()
my_str = str(html)
問題は、私はいくつかのパターンのために、このHTMLを解析するために正規表現を使用している、とstrは\ nや\ tなどのすべての空白文字を追加します。
私の質問は、str()関数がこれらの文字リテラルを追加するのを防ぐ方法です。私は私が書いたのPython 2.7のスクリプトで前urllib2の使っていた
EDIT
。私はそれを新しいPCに持ってきましたが、このPCでPython 3.6を使い始めました。これらの正規表現はもはや機能しませんでした。この関数にcon.read()を渡したときにエラーが発生しました。上記のようにstr()の呼び出しでcon.read()をラップし、3.6でcon.read()関数が\ t'sと nの束を追加したことに気付きました。私の質問は、私の表現を機能させるか、それとも「\ t \ n」として知られているすべての「charaterリテラル」を禁止するかです(私はおそらくそれらの文字に間違った用語を使用していることを認めます)。
これはPython 2.7で動作していました。私はPython 3.6に切り替えました。
def parse_html_doc(str='', poke_id = 0):
if len(str) > 0:
poke = MyClass()
poke.dex_num = re.search('\d+(?=<\/strong>)', str).group(0)
poke.name = re.search('[A-Za-z]+(?=<\/h1>)', str).group(0)
poke.hp = re.search('\d+', re.search('<th>HP<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.atk = re.search('\d+', re.search('<th>Attack<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.bdef = re.search('\d+', re.search('<th>Defense<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spatk = re.search('\d+', re.search('<th>Sp\. Atk<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spatk = re.search('\d+', re.search('<th>Sp\. Def<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.spd = re.search('\d+', re.search('<th>Speed<\/th>\s+<td class="num">\d+<\/td>', str).group(0)).group(0)
poke.des = re.search('<p>.*<\/p>', str).group(0).replace('"', '""')
poke.id = poke_id
return poke
を使用することができ、文字列の先頭と末尾に
\n
とwhitespace
を削除したい場合は、「これらの追加文字リテラルの追加」を定義してください。あなたはstrを呼び出す前に彼らがそこにいないということを意味しますか?それとも、彼らが表示されるのが好きではないという意味ですか?あなたは使用例を出力できますか? – SethMMorton"strは\ nと\ tのようなすべての空白文字を追加します - そうではありません。 "問題は、いくつかのパターンでこのhtmlを解析するために正規表現を使用することです" - そうです、それは確かに問題です。 HTMLを解析するために正規表現を使用しないでください。 BeautifulSoupのような実際のパーサーを使用してください。 – user2357112
'str()'はこの文字を追加しません。これらは常に存在します。このため、 'lxml'や' BeautifulSoup'のようなパーサーを使用しています。 – furas