用scrapy刮刮参数化的url

时间:2011-03-31 11:33:37

标签: python scrapy

我有一个使用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,
        ),
)

非常感谢您的时间,并希望有机会提前感谢您。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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'