2017-02-02 14 views
-3

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 
+1

を使用することができ、文字列の先頭と末尾に\nwhitespaceを削除したい場合は、「これらの追加文字リテラルの追加」を定義してください。あなたはstrを呼び出す前に彼らがそこにいないということを意味しますか?それとも、彼らが表示されるのが好きではないという意味ですか?あなたは使用例を出力できますか? – SethMMorton

+2

"strは\ nと\ tのようなすべての空白文字を追加します - そうではありません。 "問題は、いくつかのパターンでこのhtmlを解析するために正規表現を使用することです" - そうです、それは確かに問題です。 HTMLを解析するために正規表現を使用しないでください。 BeautifulSoupのような実際のパーサーを使用してください。 – user2357112

+1

'str()'はこの文字を追加しません。これらは常に存在します。このため、 'lxml'や' BeautifulSoup'のようなパーサーを使用しています。 – furas

答えて

0

あなたがこれをやりたいように見える:

eq = urllib.request.Request(national_url, headers={'User-Agent' : "Magic Browser"}) 
con = urllib.request.urlopen(req) 

#grab html 
html = con.read() 
my_str = str(html.replace("\n", "") 
my_str = my_str.replace("\t", "") 

これはあなたの文字列から全ての空白文字を削除する必要があります。

+0

maketransが文字列モジュールに存在しないので、これは私のためには機能しませんでした。 – ddeamaral

+1

私は間違っていたようです。 'string.maketrans'は推奨されませんでした。私は答えを更新します。 – Steampunkery

+0

まだエラーが発生しています。ValueError:最初の2つのmaketrans引数の長さは、同じ長さ( – ddeamaral

1

str()これらの文字は作成されませんが、既にそこに存在していました。

あなたは、あなたがちょうど

s = '\n  bla 123\n 1235\n ...\n' 
result = s.strip() 
print(result) 

> 'bla 123\n 1235\n ...' 
関連する問題