Vous pouvez utiliser le module Python Scrapy pour récupérer automatiquement les données du site Web en séquence lorsque vous parcourez les liens.
Pour extraire les données souhaitées du site Web, vous devez spécifier ** l'emplacement des données souhaitées **.
Ce que vous spécifiez s'appelle ** Selector **. Dans Scrapy, il existe des méthodes de spécification css et xpath, mais cette fois je vais vous expliquer comment utiliser xpath.
Installez Scrapy avec pip.
commandline
$ pip install scrapy
Scrapy Shell Scrapy a un outil appelé Scrapy shell qui vous permet de vérifier de manière interactive l'extraction des données.
commandline
scrapy shell "http://hogehoge.com/hoge/page1"
Si vous spécifiez like, le shell interactif de python sera lancé avec l'instance ** response ** contenant les informations de la page spécifiée. Lors du développement d'une araignée (robot d'exploration), nous extrairons également les données de cette instance de réponse.
En gros, nous allons extraire les données avec une telle syntaxe.
shell
>>> response.xpath('//title/text()')
[<Selector (text) xpath=//title/text()>]
Dans cet exemple, le corps (text ()) de toutes les balises de titre (// titre) dans le texte html reçu est extrait. Cependant, s'il est laissé tel quel, la valeur de retour est un sélecteur comme décrit ci-dessus. Utilisez .extract ()
pour obtenir les caractères.
shell
>>> response.xpath('//title/text()').extract()
[u'exsample title']
Puisque les données extraites sont une liste, faites-en une chaîne de caractères en spécifiant un tableau.
shell
>>> response.xpath('//title/text()').extract()[0]
u'exsample title'
Au fait, cette "chaîne de caractères" signifie unicode. python gère les chaînes en unicode.
Si vous visitez plusieurs sites Web, le xpath que vous spécifiez peut ne pas être trouvé nulle part. Dans cet état, si vous spécifiez le 0ème response.xpath (hoge) .extract [0]
du tableau comme ci-dessus, une erreur se produira, donc pour éviter cela
shell
>>> item['hoge'] = response.xpath('//title/text()').extract_first()
Etc.
Aussi, si vous voulez concaténer toutes les séquences obtenues [u'hoge1 ', u'hoge2', u'hoge3 ']
, etc., et les obtenir sous forme de chaîne de caractères.
shell
>>> extract_list = [u'hoge1', u'hoge2', u'hoge3']
>>> ''.join(extract_list)
u'hoge1hoge2hoge3'
Tu peux le faire.
xpath | Contenu |
---|---|
//div | Toutes les balises div |
//div[@class='aaa'] | Dans toutes les classes'aaa'Balise div avec |
//div[@id='aaa']/text() | Tout, id'aaa'Balise div->Corps |
//a[text()='aaa']/@href | Tout le texte'aaa'Une étiquette->Valeur d'attribut Href de |
//div/tr | Toutes les divs->Balise Tr de l'élément enfant |
//table/tr/th[text()='price']/following-sibling::td[1]/text() | Toutes les tables->Cette ligne->Champ appelé prix->Premier des éléments de données->Corps |
Le xpath pour la dernière table est pratique car vous pouvez obtenir la valeur de la table sur la page Web en spécifiant le champ (prix dans le cas ci-dessus, la partie montant).
Si td
est spécifié, l'élément td sur la même ligne sera de plus en plus utilisé, donc le premier est extrait comme td [1]
. C'est «[1]». Ce n'est pas «[0]».