0

我有一个使用 python scrapy 运行的蜘蛛,它正在抓取除了带有参数(即&符号)的页面之外的所有页面,例如,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

为了回应我自己的答案,我所有的代码都很好。它失败的原因是我调用scrapy的方式。&当我使用单引号时,它会中断。使用双引号调用蜘蛛是解决方案。

于 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 回答