Advertisement
kamegami

mh4gweaponnames.py

Jan 25th, 2015
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.88 KB | None | 0 0
  1. import scrapy
  2. from scrapy.contrib.spiders import CrawlSpider, Rule
  3. from scrapy.http import Request
  4. from scrapy.contrib.linkextractors import LinkExtractor
  5. from scrapy.selector import Selector
  6. from selenium import webdriver
  7. import time
  8.  
  9.  
  10. class Weapon(scrapy.Item):
  11.     depth = scrapy.Field()
  12.     order = scrapy.Field()
  13.     name = scrapy.Field()
  14.     jpn_name = scrapy.Field()
  15.     weapon_type = scrapy.Field()
  16.  
  17. #scrapy.Spider
  18. #class MH4GSpider(CrawlSpider):
  19. class MH4GWeaponsSpider(CrawlSpider):
  20.     name = "crawl_mh4gweaponnames"
  21.     allowed_domains = ['monsterhunter.wikia.com']
  22.     start_urls = ['http://monsterhunter.wikia.com/wiki/MH4U:_Great_Sword_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Long_Sword_Weapon_Tree',
  23.         'http://monsterhunter.wikia.com/wiki/MH4U:_Sword_and_Shield_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Dual_Blades_Weapon_Tree',
  24.         'http://monsterhunter.wikia.com/wiki/MH4U:_Hammer_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Hunting_Horn_Weapon_Tree',
  25.         'http://monsterhunter.wikia.com/wiki/MH4U:_Lance_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Gunlance_Weapon_Tree',
  26.         'http://monsterhunter.wikia.com/wiki/MH4U:_Switch_Axe_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Charge_Blade_Weapon_Tree',
  27.         'http://monsterhunter.wikia.com/wiki/MH4U:_Light_Bowgun_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Heavy_Bowgun_Weapon_Tree',
  28.         'http://monsterhunter.wikia.com/wiki/MH4U:_Bow_Weapon_Tree', 'http://monsterhunter.wikia.com/wiki/MH4U:_Insect_Glaive_Weapon_Tree']
  29.     #start_urls = ['http://monsterhunter.wikia.com/wiki/MH4U:_Bow_Weapon_Tree']
  30.  
  31.     def __init__(self):
  32.         CrawlSpider.__init__(self)
  33.         #self.br = webdriver.Firefox()
  34.  
  35.     def first(self, item):
  36.         if item:
  37.             return u' '.join(unicode(u' '.join(item)).split())
  38.         else:
  39.             return u''
  40.  
  41.     def parse(self, response):
  42.         weapontreedict = {'http://monsterhunter.wikia.com/wiki/MH4U:_Great_Sword_Weapon_Tree' : 'Great Sword',
  43.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Long_Sword_Weapon_Tree' : 'Long Sword',
  44.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Sword_and_Shield_Weapon_Tree': 'Sword and Shield',
  45.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Dual_Blades_Weapon_Tree': 'Dual Blades',
  46.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Hammer_Weapon_Tree': "Hammer",
  47.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Hunting_Horn_Weapon_Tree': 'Hunting Horn',
  48.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Lance_Weapon_Tree': 'Lance',
  49.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Gunlance_Weapon_Tree': 'Gunlance',
  50.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Switch_Axe_Weapon_Tree': "Switch Axe",
  51.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Charge_Blade_Weapon_Tree': 'Charge Blade',
  52.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Light_Bowgun_Weapon_Tree': 'Light Bowgun',
  53.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Heavy_Bowgun_Weapon_Tree': 'Heavy Bowgun',
  54.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Bow_Weapon_Tree': 'Bow',
  55.                           'http://monsterhunter.wikia.com/wiki/MH4U:_Insect_Glaive_Weapon_Tree': 'Insect Glaive'}
  56.         rows = response.xpath('//table[@class="wikitable hover"]//tr//td[1]')
  57.         #del links[5:]
  58.         i = 1
  59.         for row in rows:
  60.             m = row.xpath('.//a[2]//@href').extract()
  61.             if not m:
  62.                 continue
  63.             depth = len(row.xpath('img').extract())
  64.             murl = 'http://monsterhunter.wikia.com' + m[0]
  65.             request = Request(url = murl, meta = {
  66.                   'dont_redirect': True,
  67.                   'handle_httpstatus_list': [302]
  68.               }, callback = self.parse_weapon)
  69.             request.meta['weapon_name'] = row.xpath('.//a[2]//text()').extract();
  70.             request.meta['order'] = i
  71.             request.meta['depth0'] = depth
  72.             request.meta['weaponurl'] = weapontreedict[response.url]
  73.             i+= 1
  74.             yield request
  75.  
  76.     def parse_weapon(self, response):
  77.         weapon = Weapon()
  78.         weapon["depth"] = response.meta['depth0']
  79.         weapon["order"] = response.meta['order']
  80.         weapon["weapon_type"] = response.meta['weaponurl']
  81.         weapon["name"] = response.meta['weapon_name']
  82.         #weapon["name"] = self.first(response.xpath('//table[@class="linetable"]//div[2]/b/text()').extract())
  83.         weapon["jpn_name"] = self.first(response.xpath('//table[@class="linetable"]//div[2]/text()').extract()).replace('/ ', '')
  84.         #weapon["weapon_type"] = self.first(row.xpath('td[2]//text()[1]').extract())
  85.         yield weapon
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement