0

私は python のスクレイピーを使用して実行しているスパイダーを持っています。これは&http://www.amazon.co.uk/gp/product/B003ZDXHSG/ref=s9_simh_gw_p23_d0_i3?pf_rd_m=A3P5ROKL5A1OLE&pf_rd_s=center-2&pf_rd_r=1NWN2VXCA63R7TDYC3KQ&pf_rd_t=101&pf_rd_p=467128533&pf_rd_i=468294.

エラーログは言う[scrapy] ERROR: xxx matching query does not exist.

私は次のように使用しCrawlSpiderていますSgmlLinkExtractor rule

rules = (
       Rule(SgmlLinkExtractor(allow='[a-zA-Z0-9.:\/=_?&-]+$'),
            'parse',
            follow=True,
        ),
)

貴重な時間を割いていただき、誠にありがとうございました。

4

2 に答える 2

1

私自身の答えに答えるために、私のコードはすべて問題ありませんでした。それが失敗した理由は、私がスクレイピーと呼んでいた方法です。&一重引用符を使用していたため、壊れています。二重引用符を使用してスパイダーを呼び出すことが解決策です。

于 2011-04-02T11:41:48.050 に答える
0

あなたの式は、関係する限り、URL と一致re.serach()します。r'regexpression'Python が文字列を生の文字列として扱うように使用してみましたか? 生の文字列と処理された文字列の両方を使用して一致するように見えますが、Python で正規表現を生の文字列として扱うことが常に最善です。

>>> import re
>>> url="http://www.amazon.co.uk/gp/product/B003ZDXHSG/ref=s9_simh_gw_p23_d0_i3?pf_rd_m=A3P5ROKL5A1OLE&pf_rd_s=center-2&pf_rd_r=1NWN2VXCA63R7TDYC3KQ&pf_rd_t=101&pf_rd_p=467128533&pf_rd_i=468294" 
>>> m = re.search(r'[a-zA-Z0-9.:\/=_?&-]+$', url) 
>>> m.group()
'http://www.amazon.co.uk/gp/product/B003ZDXHSG/ref=s9_simh_gw_p23_d0_i3?pf_rd_m=A3P5ROKL5A1OLE&pf_rd_s=center-2&pf_rd_r=1NWN2VXCA63R7TDYC3KQ&pf_rd_t=101&pf_rd_p=467128533&pf_rd_i=468294'

>>> m = re.search('[a-zA-Z0-9.:\/=_?&-]+$', url)
>>> m.group()
'http://www.amazon.co.uk/gp/product/B003ZDXHSG/ref=s9_simh_gw_p23_d0_i3?pf_rd_m=A3P5ROKL5A1OLE&pf_rd_s=center-2&pf_rd_r=1NWN2VXCA63R7TDYC3KQ&pf_rd_t=101&pf_rd_p=467128533&pf_rd_i=468294'
于 2011-03-31T11:50:55.520 に答える