ええ、リンクを取得するたびに、メソッド urlparse.urljoin を使用する必要があります。
def parse(self, response):
hxs = HtmlXPathSelector(response)
urls = hxs.select('//a[contains(@href, "content")]/@href').extract() ## only grab url with content in url name
for i in urls:
yield Request(urlparse.urljoin(response.url, i[1:]),callback=self.parse_url)
URL全体を取得して正しく解析しようとしていると思いますか?その場合、シンプルな 2 つのメソッド システムが basespider で機能します。parse メソッドはリンクを見つけ、抽出したものをパイプラインに出力する parse_url メソッドに送信します
def parse(self, response):
hxs = HtmlXPathSelector(response)
urls = hxs.select('//a[contains(@href, "content")]/@href').extract() ## only grab url with content in url name
for i in urls:
yield Request(urlparse.urljoin(response.url, i[1:]),callback=self.parse_url)
def parse_url(self, response):
hxs = HtmlXPathSelector(response)
item = ZipgrabberItem()
item['zip'] = hxs.select("//div[contains(@class,'odd')]/text()").extract() ## this grabs it
return item