from string import join
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders.crawl import Rule, CrawlSpider
from scrapy.http.request import Request
from scrapy.selector import HtmlXPathSelector
from Gfire.items import GfireItem
class GuideSpider(CrawlSpider):
name = "Gfire"
allowed_domains = ['www.example.com']
start_urls = [
"http://www.example.com/gfire/guides"
]
rules = (
Rule(SgmlLinkExtractor(allow=("gfire/guides.*page=")), callback='parse_item', follow=True),
)
def parse_item(self, response):
hxs = HtmlXPathSelector(response)
items = []
sites = hxs.select('//div[@class="title"]')
for site in sites:
item = GFireItem()
item['title'] = site.select('./a/text()').extract()
item['guide_url'] = site.select('./a/@href').extract()
item['guide_url'] = "http://www.example.com" + join(item['guide_url'])
items.append(item)
return Request(items[1], callback=self.parse_item2)
def parse_item2(self, response):
hxs = HtmlXPathSelector(response)
hero = hxs.select("//h3/a/text()").extract()
return hero
거미가 작동하지 않습니다. 요청 함수는 항목 [ 'guide_url']이어야하는 항목 [1]을 포함하지만 매개 변수가 str 또는 unicode 여야한다고 나에게 말합니다. 어떻게이 오류를 해결할 수 있습니까? 그리고 아이템 목록에 콜백 함수를 어떻게 전달할 수 있습니까? request.meta를 통해?Scrapy Spider에서 Request 기능을 사용하는 방법?
, 당신은 hxs.select'같은 것을 사용할 수 있습니다에만 두 번째 사이트를 얻으려면 ('// DIV의 [다음
Request
를 만들 때 옆으로, 당신은items[1]['guide_url']
URL을 추출해야@ class = "title"] [1] ')'. –