Il existe différentes approches du scraping Web en Python. Dans cet article, nous prendrons Scrapy, un cadre pour le scraping, comme sujet et en apprendrons davantage sur Scrapy tout en créant un échantillon simple.
Scarpy est un framework de grattage rapide et de haut niveau. Il a diverses fonctions liées à l'exploration et au grattage de sites Web. Les principales fonctions sont divisées en composants, et l'utilisateur crée des classes liées à chaque composant pour créer un programme.
De http://doc.scrapy.org/en/1.0/topics/architecture.html
Les principaux composants sont:
Scrapy Engine
Scheduler
Downloader
Spiders
Item Pipeline
Comme vous pouvez le voir, Scrapy a diverses fonctions. Cette fois, créez d'abord Spider, qui est le concept de base de Scrapy, Écrivons un programme pour afficher l'URL sur le calendrier de l'Avent sur Qiita.
Tout d'abord, installez avec pip.
pip install scrapy
Ensuite, créez Spider, qui est l'un des composants. Spider a un point de terminaison d'URL pour démarrer le processus d'exploration, Décrit le processus d'extraction de l'URL.
# -*- coding: utf-8 -*-
import scrapy
class QiitaSpider(scrapy.Spider):
name = 'qiita_spider'
#Endpoint (lister l'URL pour commencer l'exploration)
start_urls = ['http://qiita.com/advent-calendar/2015/categories/programming_languages']
custom_settings = {
"DOWNLOAD_DELAY": 1,
}
#Décrivez le processus d'extraction d'URL
def parse(self, response):
for href in response.css('.adventCalendarList .adventCalendarList_calendarTitle > a::attr(href)'):
full_url = response.urljoin(href.extract())
#Créez une requête basée sur l'URL extraite et téléchargez-la
yield scrapy.Request(full_url, callback=self.parse_item)
#Créez un élément pour extraire et enregistrer le contenu en fonction de la page téléchargée
def parse_item(self, response):
urls = []
for href in response.css('.adventCalendarItem_entry > a::attr(href)'):
full_url = response.urljoin(href.extract())
urls.append(full_url)
yield {
'title': response.css('h1::text').extract(),
'urls': urls,
}
Scrapy est livré avec de nombreuses commandes. Cette fois pour exécuter Spider Exécutez Spider à l'aide de la commande runspider. Vous pouvez utiliser l'option -o pour enregistrer le résultat créé par parse_item dans un fichier au format JSON.
scrapy runspider qiita_spider.py -o advent_calendar.json
Le résultat de l'exécution est le suivant. J'ai pu obtenir une liste des titres et des URL publiés de chaque calendrier de l'Avent!
{
"urls": [
"http://loboskobayashi.github.io/pythonsf/2015/12-01/recomending_PythonSf_one-liners_for_general_python_codes/",
"http://qiita.com/csakatoku/items/444db2d0e421265ec106",
"http://qiita.com/csakatoku/items/86904adaa0922e80069c",
"http://qiita.com/Hironsan/items/fb6ee6b8e0291a7e5a1d",
"http://qiita.com/csakatoku/items/77a36888d0851f6d4ff0",
"http://qiita.com/csakatoku/items/a5b6c3604c0d411154fa",
"http://qiita.com/sharow/items/21e421a2a40275ee9bb8",
"http://qiita.com/Lspeciosum/items/d248b64d1bdcb8e39d32",
"http://qiita.com/CS_Toku/items/353fd4b0fd9ed17dc152",
"http://hideharaaws.hatenablog.com/entry/django-upgrade-16to18",
"http://qiita.com/FGtatsuro/items/0efebb9b58374d16c5f0",
"http://shinyorke.hatenablog.com/entry/2015/12/12/143121",
"http://qiita.com/wrist/items/5759f894303e4364ebfd",
"http://qiita.com/kimihiro_n/items/86e0a9e619720e57ecd8",
"http://qiita.com/satoshi03/items/ae616dc080d085604b06",
"http://qiita.com/CS_Toku/items/32028e65a8bfa97266d6",
"http://fx-kirin.com/python/nfp-linear-reggression-model/"
],
"title": [
"Python \u305d\u306e2 Advent Calendar 2015"
]
},
{
"urls": [
"http://qiita.com/nasa9084/items/40f223b5b44f13ef2925",
"http://studio3104.hatenablog.com/entry/2015/12/02/120957",
"http://qiita.com/Tsutomu-KKE@github/items/29414e2d4f30b2bc94ae",
"http://qiita.com/icoxfog417/items/913bb815d8d419148c33",
"http://qiita.com/sakamotomsh/items/ab6c15b971587905ef43",
"http://cocu.hatenablog.com/entry/2015/12/06/022100",
"http://qiita.com/masashi127/items/ca092c13e1300f4f6ade",
"http://qiita.com/kaneshin/items/269bc5f156d86f8a91c4",
"http://qiita.com/wh11e7rue/items/15603e8970c36ab9733d",
"http://qiita.com/ohkawa/items/368e6bcadc56a118adaf",
"http://qiita.com/teitei_tk/items/5c5c9e653b3a13108d12",
"http://sinhrks.hatenablog.com/entry/2015/12/13/215858"
],
"title": [
"Python Advent Calendar 2015"
]
},
Cette fois, j'ai créé Spider, qui est un composant de base de Scrapy, et j'ai effectué du grattage. Si vous utilisez Scrapy, le framework se chargera du traitement de routine lié à l'exploration. Par conséquent, les développeurs peuvent décrire et développer uniquement les parties qui sont vraiment nécessaires pour les services et les applications, telles que le traitement de l'extraction d'URL et le traitement du stockage de données. À partir de la prochaine fois, nous couvrirons le cache et enregistrerons le traitement. impatient de!
Recommended Posts