Résumé des techniques utiles de Scrapy en Python

Python Scrapy est une bibliothèque dédiée au scraping et à l'exploration qui peut faire diverses choses

Récemment, j'ai eu beaucoup de travail de grattage dans mon travail. J'avais l'habitude d'implémenter le scraping avec une bibliothèque PHP appelée simplehtml.

Pour cette raison, j'ai récemment effectué un travail de scraping en utilisant Scrapy de Python. (PHP est facile, mais j'ai aussi un désir personnel d'obtenir un diplôme de PHP.)

Pourquoi je pense que Scrapy est profond

Les principales raisons pour lesquelles Scrapy est bon sont les suivantes.

――Vous pouvez faire un grattage compliqué

Je pense que cela peut être mentionné. Jusqu'à présent, le scraping permettait de lire les modèles d'URL. Scrapy fournit une méthode pour les transitions d'écran, qui vous permet de soumettre des formulaires, par exemple, avec beaucoup moins de ressources mémoire que l'automatisation du navigateur que vous pouvez faire avec *** sélénium ***.

Technique pratique trouvée dans Scrapy

De base

*** Installation de scrapy ***

$pip install scrapy

*** Démarrer le projet Scrapy Spider ***

$scrapy startproject [project_name] [project_dir]

Ligne de commande

*** Liste des projets Spider créés ***

$scrapy list

*** Créez une nouvelle Spider dans le projet créé ***

#Ajouter un nom de domaine
$scrapy genspider [spider_name] mydomain.com

** Spécifiez l'URL lors de l'exécution de la ligne de commande **

$scrapy crawl -a start_urls="http://example1.com,http://example2.com" [spider_name]

*** Sortie au format CSV ***

$scrapy crawl -o csv_file_name.csv [spider_name]

*** Sortie en JSON ***

$scrapy crawl -o json_file_name.json [spider_name]

Édition Shell

** Lancez le Scrapy shell **

$ scrapy shell [URL]

** Afficher toutes les pages **

#la réponse peut être utilisée sans définition
response.body

** Obtenez tous les liens **

for link in response.css('a::attr(href)'):
   print link.get()

Édition de la bibliothèque

** Utilisez des expressions régulières **

#Lorsqu'un fichier spécifique dans le href de la balise a correspond
matched = response.css('a::attr(href)').re(r'detail\.php')
if len(matched) > 0:
   print 'matched'

#Lorsqu'un japonais spécifique dans la chaîne de caractères de la balise a correspond
matched = response.css('a::text').re(u'Résumé')
if len(matched) > 0:
   print 'matched'

** Obtenir le tag **

#obtenir un tag
response.css('a')

** Obtenez avec le sélecteur **

#obtenir un tag
response.css('a.link')

#Obtenez plusieurs cours<li class="page next"></li>
response.css('li.page.next')

** Convertir le chemin relatif en URL **

for link in response.css('a::attr(href)'):
   print response.urljoin(link.get())

** Soumettre les informations du formulaire **

scrapy.FormRequest(response,formdata={"username":"login_username","password":"login_password"}

** Traitement itératif des éléments enfants de l'élément acquis par XPath **

#Obtenir l'élément DIV
divs = response.xpath('//div')
#Répéter l'élément P dans DIV
for p in divs.xpath('.//p'):  
     print(p.get())

** Transition vers une autre page **

#self.parse(self,response)En tant que fonction de rappel
yield scrapy.Request([url],callback=self.parse)

autres

** Créer un élément (modifier les éléments.py directement sous Projet) ** Histoire originale

class Product(scrapy.Item):
    name = scrapy.Field()
    price = scrapy.Field()
    stock = scrapy.Field()
    tags = scrapy.Field()
    last_updated = scrapy.Field(serializer=str)

échantillon

** Allez à la page de détails jusqu'à ce qu'il n'y ait plus d'éléments dans la liste (cela ne fonctionnera pas tel quel, veuillez donc le mettre dans la classe) **

    def parse(self, response):
            title = a.css('::text').extract_first()
            title_match = a.css('::text').re(u'entraînement')
            if len(title_match) > 0:
                    "title":title,
                    "url":response.urljoin(link_param)
                }
                ptn = re.search("\/jinzaiikusei\/\w+\/",url)
                if ptn:
                    self.scraping_list.append(url)
        yield scrapy.Request(self.scraping_list[0],callback=self.parse_detail)
        pass

    def parse_detail(self, response):
         for item in response.css('a'):
             title =  item.css('::text').extract_first()
             url =  item.css('::attr(href)').extract_first()
             title_matched = item.css('::text').re(u'entraînement')
             url_matched = item.css('::attr(href)').re(r'jinzaiikusei\/.*\/.*\.html')
             if url_matched:
                 item = {
                         "title":title,
                         "url":url
                    }
                 yield item
         self.current_index = self.current_index + 1
         if self.current_index < len(self.scraping_list):

             yield scrapy.Request(self.scraping_list[self.current_index],callback=self.parse_detail)
         else:
             pass

Journal des modifications

--2019 / 12/06 nouvellement créé --2019 / 12/07 Ajout de techniques de bibliothèque --2019 / 12/09 Ajout de techniques de bibliothèque (saisie de formulaire, etc.) --2019 / 12/16 Ajout d'un chapitre sur les objets --2019 / 12/21 Commande ajoutée

Recommended Posts

Résumé des techniques utiles de Scrapy en Python
Résumé des petites techniques pour les commandes Linux
Résumé des arguments Python
Résumé des tableaux Python fréquemment utilisés (pour moi-même)
Résumé du livre électronique Python utile pour l'analyse de données gratuite
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
Résumé des conseils utiles pour le terminal Linux ☆ Mis à jour quotidiennement
Récapitulatif des paramètres d'environnement Python pour moi-même [mac] [ubuntu]
Récapitulatif des outils d'exploitation de l'interface graphique Windows avec Python
Résumé des méthodes de prétraitement pour les débutants en Python (trame de données Pandas)
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
Résumé de la prise en charge des opérations de hachage (dictionnaire) pour Ruby et Python
Un bref résumé de la collection Python
Cours Python pour la science des données - techniques utiles
Premiers pas avec python3
Enregistrement de l'introduction de Python pour les nouveaux arrivants
[Pour les professionnels de la concurrence] Résumé du doublement
Résumé des index et des tranches Python
[OpenCV; Python] Résumé de la fonction findcontours
Résumé Python
Un bref résumé de Graphviz en python (expliqué uniquement pour mac)
Résumé Python
Technique Python pour ceux qui veulent se débarrasser des débutants
Résumé des pages utiles pour étudier le framework d'apprentissage profond Chainer
[Python] Résumé de l'utilisation des pandas
[Python] Compte-rendu de la réunion d'étude pour les débutants (7/15)
Résumé des méthodes pour déterminer automatiquement les seuils
Techniques Python détaillées requises pour la mise en forme des données (1)
[Python2.7] Résumé de l'utilisation d'unittest
[Python] Un script utile pour le traitement Excel / csv
Pandas du débutant, par le débutant, pour le débutant [Python]
Résumé des méthodes intégrées, etc. de la liste Python
Résumé de l'utilisation de la liste Python
Techniques Python détaillées requises pour la mise en forme des données (2)
[Python2.7] Résumé de l'utilisation du sous-processus
Résumé de la spécification des options d'axe de Python "numpy.sum (...)"
Utile au quotidien!? Semi-automatisation de la méthode de planification expérimentale la plus puissante de COSPA avec Python
30/10/2016 else pour Python3> pour:
python [pour moi]
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Résumé de la correspondance entre les opérations de tableau ruby et python
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Résumé du didacticiel Python
Résumé de l'utilisation de MNIST avec Python
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
Les bases de Python ①
Bases de python ①
Traitement d'image? L'histoire du démarrage de Python pour
Compréhension facile de Python pour les tableaux et (pour les super débutants)
Copie de python
[Python] Résumé des opérations sur les fichiers S3 avec boto3
Fichiers PDF et sites utiles pour apprendre Python 3
Code pour vérifier le fonctionnement de Python Matplot lib
Résumé de l'étude de Python pour utiliser AWS Lambda
résumé relatif à python
Résumé relatif aux E / S de python et fortran
Résumé des versions du noyau / Python pour chaque version de Debian
[Hikari-Python] Chapitre 09-01 Classes (Bases des objets)