【发布时间】:2015-07-20 22:19:09
【问题描述】:
我正在为tripAdvisor附近酒店的景点构建一个刮板, 刮板会像这样解析网址:http://www.tripadvisor.com/AttractionsNear-g55711-d1218038-oa30-Dallas_Addison_Marriott_Quorum_By_the_Galleria-Dallas_Texas.html
我写了两条规则来获取这些 url,第二条是用于目的地 url 的下一个景点页面:
Rule(SgmlLinkExtractor(allow=(".*AttractionsNear-g.*",),
restrict_xpaths=('.//div[@class="nearby_links wrap"]/a',), unique=True),
callback='parse_item', follow=True),
Rule(SgmlLinkExtractor(allow=(".*AttractionsNear-g.*",),
restrict_xpaths=('.//div[@class="pgLinks"]/a[contains(@class, "pageNext")]',), unique=True),
callback='parse_item', follow=True),
但在我的目标 url 中,第一条规则是有效的,并且抓取工具将重新抓取到已解析的 url 并将从头开始该过程。
我试图避免 DownloaderMiddleware 的循环爬取
class LocationsDownloaderMiddleware(object):
def process_request(self, request, spider):
if(request.url.encode('ascii', errors='ignore') in deny_domains):
return IgnoreRequest()
else: return None
并通过在响应解析中管理 deny_domains 列表
def parse_item(self, response):
deny_domains.append(response.url.encode('ascii', errors='ignore'))
但现在这个中间件正在阻止我要解析的每个 url。
我该如何管理它? 谢谢
【问题讨论】: