我是Python和Scrapy的新手。我正在试图从主站点链接一个网站列表。
主站点的格式为http://www.example.com/something.aspx,我希望SgmlLinkExtractor提取的子站点/子站点的格式为http://www.example.com/something.aspx?ac=N123&dc=123,其中{{1}之后的值}和ac=
更改不同的链接。因此,在正则表达式中,我将它们写为dc=
我尝试使用scrapy shell中的SgmlLinkExtractor。首先,
http://www\.example\.com/something\.aspx\?ac=[A-Za-z\d]+&dc=\d+
通过这种方式,我设法获得页面上的所有链接。
如果我使用
>>>link = SgmlLinkExtractor()
>>>link.extract_links(response)
我仍然可以获得以http://www.example.com/something.aspx开头的所有链接?但是,如果我尝试
>>>link = SgmlLinkExtractor(allow=("http://www\.example\.com/something\.aspx\?"))
>>>link.extract_links(response)
甚至
>>>link = SgmlLinkExtractor(allow=("http://www\.example\.com/something\.aspx\?ac=[A-Za-z\d]+&dc=\d+"))
>>>link.extract_links(response)
我一无所获。 >>>link = SgmlLinkExtractor(allow=("http://www\.example\.com/something\.aspx\?ac"))
>>>link.extract_links(response)
就是我得到的。有什么想法解决这个问题吗?
修改
我再次尝试使用
>>>[]
这是有效但
>>>link = SgmlLinkExtractor(allow=(r"ac"))
>>>link.extract_links(response)
仍然无法正常工作。我认为问题可能是由于网址中的 >>>link = SgmlLinkExtractor(allow=(r"ac=[A-Za-z\d]+&dc=\d+"))
>>>link.extract_links(response)
和?
造成的。当我为包含&
和allow
的{{1}}指定参数时,是否需要任何转义字符或任何内容才能使链接提取器正常工作?基本上我需要包括?
。
虽然一种解决方法是使用&
,但我希望我可以在&dc...
参数中包含restrict_xpath
和?
。