2011-02-07 4 views
0

ここでは、私が達成しようとしているものです:PythonのMechanizeのを使用してPythonの正規表現 - 複数の検索

  1. 私はコンテンツが私の正規表現と一致しない場合、私は私が行う別のサイト
  2. を開くサイト
  3. を開きます

    m = re.search('<td>(?P<alt>\d+)', response.read()) 
    ... 
    m = re.search('<td>(?P<alt>\w+)', response.read()) 
    print m.group('alt') 
    
    012:別の正規表現

そして、抽出されたコードを使用して検索

私が取得しています:

AttributeError: 'NoneType' object has no attribute 'group'

を私はのコメントを解除した場合、第2探索すべてがうまくています。私はこの行動を理解していません。

このようなエラーはthis stackoverflow issuethisにリダイレクトされましたが、役に立たなかったので、これらのいずれも私の問題を解決しませんでした。

ここで効率は気にしないので、私はcompileを使用しません。

+0

各response.read()のフィルタリングされていない結果は何ですか?私は2番目の読書があなたが期待しているものを返さないことを賭けている。 – cmaynard

+0

re.searchを2回呼び出すことで、何をしようとしているのか詳細を追加できますか?現在のサンプルコードは意味をなさない。 – shang

+0

@kramthegram - ありがとう!あなたが正しい。正規表現の問題ではありませんでした。 @shang - response.read()はこれらの2行の間で変化するので、私の質問の2番目の点を示します。 – laszchamachla

答えて

2

responseがファイルのようなオブジェクトであると仮定すると、もう一度readを呼び出すと、ファイルを消費したときに空の文字列が返されることがあります。

data = response.read() 
m = re.search('<td>(?P<alt>\d\d*)', data) 
m = re.search('<td>(?P<alt>\d\d*)', data) 
print m.group('alt') 

なぜsearchに複数回電話をかけますか?

+0

あなたは正しいです - ありがとう!だから、正規表現の問題ではありませんでした。私の間違い。データはこれらの2つの行(私の質問の2番目の点)の間で変更される可能性があるので、私は複数回コール検索をしたいと思います。 – laszchamachla

+0

@laszchamachlaその場合、私はこれがどんな助けであるかわかりません。私があなたを正しく理解していれば、ページAを取得してデータを検索します。一致しない場合は新しいリクエストを行い、そのデータを検索します。 2回の検索の間に新しいリクエストを発行して新しいレスポンスを取得すると問題はありません。 –

+0

@Reiner - 正確には、それは私にとってもかなり奇妙です。しかし、あなたがアドバイスしたように、すべての検索の前に変数にresponse.read()を代入することで問題が解決されます。 – laszchamachla