Nous recueillons des informations telles que le nom du magasin, la latitude et la longitude, et le service de déploiement à partir des informations du magasin KFC. Puisque les informations du magasin sont générées par javascript, les éclaboussures sont prises entre les deux.
Liste des précautions pour le scraping Web
AWS EC2: Amazon Linux (2016.09-release) ,t2.micro Python 2.7.12
python2.7
sudo yum groupinstall "Development tools"
sudo yum install python-devel libffi-devel openssl-devel libxml2-devel libxslt-devel
sudo pip install scrapy
sudo pip install service_identity #Amazon Linux est installé par défaut, il n'est donc pas nécessaire
sudo yum -y install docker-io
sudo service docker start
sudo chkconfig docker on
sudo pip install scrapy-splash
docker pull scrapinghub/splash
docker run -p 8050:8050 scrapinghub/splash
splash est couvert par docker. Facile.
(Site de référence) [Remarque sur la façon de démarrer le robot d'exploration Python "Scrapy"](http://sechiro.hatenablog.com/entry/2016/04/02/Python%E8%A3%BD%E3%82%AF%E3%83%AD % E3% 83% BC% E3% 83% A9% E3% 83% BC% E3% 80% 8CScrapy% E3% 80% 8D% E3% 81% AE% E5% A7% 8B% E3% 82% 81% E6 % 96% B9% E3% 83% A1% E3% 83% A2) Grattage facile de pages JavaScript à l'aide de scrapy-splash github (scrapy-splash)
Créez un modèle pour le projet et l'araignée.
python2.7
export PRJ_NAME=KFCShopSpider
scrapy startproject ${PRJ_NAME}
cd ./${PRJ_NAME}/${PRJ_NAME}/spider
scrapy genspider ${PRJ_NAME} kfc.co.jp
Définissez l'élément que vous souhaitez obtenir. Cette fois, nous obtiendrons le nom du magasin, l'adresse, map_url (latitude et longitude), et la présence ou l'absence de divers services.
~/KFCShopSpider/KFCShopSpider/items.py
# -*- coding: utf-8 -*-
import scrapy
class KFCShopspiderItem(scrapy.Item):
name = scrapy.Field()
address = scrapy.Field()
map_url = scrapy.Field()
DriveThrough = scrapy.Field()
Parking = scrapy.Field()
Delivery = scrapy.Field()
Wlan = scrapy.Field()
pass
Ne mettez pas de charge sur l'autre partie. Requis pour USER_AGENT, ROBOTSTXT_OBEY et DOWNLOAD_DELAY.
~/KFCShopSpider/KFCShopSpider/settings.py
# -*- coding: utf-8 -*-
BOT_NAME = 'KFCShopSpider'
SPIDER_MODULES = ['KFCShopSpider.spiders']
NEWSPIDER_MODULE = 'KFCShopSpider.spiders'
USER_AGENT = 'KFCShopSpider (+http://www.yourdomain.com)'
ROBOTSTXT_OBEY = True
DOWNLOAD_DELAY = 3
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPLASH_URL = 'http://localhost:8050/'
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
~/KFCShopSpider/KFCShopSpider/spider/KFCShop_spider.py
# -*- coding: utf-8 -*-
import scrapy
from scrapy.spiders import CrawlSpider
from scrapy_splash import SplashRequest
from ..items import KFCShopspiderItem
class KFCShopSpider(CrawlSpider):
name = "KFCShopSpider"
allowed_domains = ["kfc.co.jp"]
start_urls = []
shop_url_home ='http://www.kfc.co.jp/search/fuken.html?t=attr_con&kencode='
#Commencez par la page de résultats de recherche de 47 préfectures.
for i in range(1,48):
prfct_id = '{0:02d}'.format(i)
url = shop_url_home + prfct_id
start_urls.append(url)
#Obtient la réponse rendue.
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, self.parse,
args={'wait': 0.5},
)
def parse(self, response):
#Chaque information de magasin(=élément de liste)Spécifier.
stores = response.xpath('//ul[@id="outShop"]/li')
for store in stores:
item = KFCShopspiderItem()
#Décrivez avec un chemin relatif.
item['address'] = store.xpath('./span[@class="scAddress"]/text()[1]').extract()
item['map_url'] = store.xpath('./ul/li[2]/div/a/@href').extract()
item['DriveThrough']= store.xpath('./span[@class="scIcon"]/img[contains(./@src,"check04")]/@alt').extract()
item['Parking'] = store.xpath('./span[@class="scIcon"]/img[contains(./@src,"check05")]/@alt').extract()
item['Delivery'] = store.xpath('./span[@class="scIcon"]/img[contains(./@src,"check02")]/@alt').extract()
item['Wlan'] = store.xpath('./span[@class="scIcon"]/img[contains(./@src,"check03")]/@alt').extract()
yield item
#De chaque résultat de recherche'prochain'Obtenez la destination du lien et appelez la méthode paese.
next_page= response.xpath('//li[@class="next"]/a/@href')
if next_page:
# 'prochain'Il y en a deux en haut et en bas de la liste des magasins, alors n'obtenez que le premier élément
url = response.urljoin(next_page[0].extract())
yield SplashRequest(url, self.parse)
L'outil de développement Chrome (touche F12) est utile pour vérifier le xpath. Vous pouvez obtenir l'élément que vous souhaitez vérifier à partir de la vue Eléments en cliquant avec le bouton droit de la souris> Copier> Copier XPath.
python2.7
scrapy shell "http://localhost:8050/render.html?url={L'URL que vous souhaitez afficher}"
Nous avons pu obtenir des informations sur plus de 1 000 magasins en 10 minutes environ.
python2.7
scrapy crawl ${PRJ_NAME} -o hoge.csv
Recommended Posts