CrawlSpider는 BaseSpider를 상속합니다. 방금 링크를 추출하고 따라 가기위한 규칙이 추가되었습니다. 이러한 규칙은 당신을 위해 유연 충분하지 경우 - 사용 BaseSpider : BaseSpider의 start_urls 당신을 위해 유연 충분하지 않은 경우에도
class USpider(BaseSpider):
"""my spider. """
start_urls = ['http://www.amazon.com/s/?url=search-alias%3Dapparel&sort=relevance-fs-browse-rank']
allowed_domains = ['amazon.com']
def parse(self, response):
'''Parse main category search page and extract subcategory search link.'''
self.log('Downloaded category search page.', log.DEBUG)
if response.meta['depth'] > 5:
self.log('Categories depth limit reached (recursive links?). Stopping further following.', log.WARNING)
hxs = HtmlXPathSelector(response)
subcategories = hxs.select("//div[@id='refinements']/*[starts-with(.,'Department')]/following-sibling::ul[1]/li/a[span[@class='refinementLink']]/@href").extract()
for subcategory in subcategories:
subcategorySearchLink = urlparse.urljoin(response.url, subcategorySearchLink)
yield Request(subcategorySearchLink, callback = self.parseSubcategory)
def parseSubcategory(self, response):
'''Parse subcategory search page and extract item links.'''
hxs = HtmlXPathSelector(response)
for itemLink in hxs.select('//a[@class="title"]/@href').extract():
itemLink = urlparse.urljoin(response.url, itemLink)
self.log('Requesting item page: ' + itemLink, log.DEBUG)
yield Request(itemLink, callback = self.parseItem)
try:
nextPageLink = hxs.select("//a[@id='pagnNextLink']/@href").extract()[0]
nextPageLink = urlparse.urljoin(response.url, nextPageLink)
self.log('\nGoing to next search page: ' + nextPageLink + '\n', log.DEBUG)
yield Request(nextPageLink, callback = self.parseSubcategory)
except:
self.log('Whole category parsed: ' + categoryPath, log.DEBUG)
def parseItem(self, response):
'''Parse item page and extract product info.'''
hxs = HtmlXPathSelector(response)
item = UItem()
item['brand'] = self.extractText("//div[@class='buying']/span[1]/a[1]", hxs)
item['title'] = self.extractText("//span[@id='btAsinTitle']", hxs)
...
,
start_requests 메소드를 오버라이드 (override).
정말 고마워요! 나는 아마존을 크롤링하고 있다고 언급하지 않았고, 당신은 믿을 수 없을 정도로 유용한 리소스를 주었다. D. Amazon에는 해시 문자가 포함 된 일부 URL이 있으며 Scrapy는 해당 해시 기호에서 끝까지 URL을 제거합니다. 이 동작을 수정하고 전체 URL을 유지할 수있는 방법이 있습니까? T.I.A, 도와 주셔서 감사합니다. – romeroqj
어디에서 스트리핑합니까? request.url, xpath selector 또는? – warvariuc
확인해도 괜찮다면 새 스레드를 만듭니다. http://stackoverflow.com/questions/6604690/scrapy-hash-tag-on-urls – romeroqj