In letzter Zeit habe ich viel Kratzarbeit in meiner Arbeit bekommen. Ich habe das Scraping mit einer PHP-Bibliothek namens simplehtml implementiert.
Aus diesem Grund habe ich kürzlich mit Pythons Scrapy Scraping-Arbeiten durchgeführt. (PHP ist einfach, aber ich habe auch den persönlichen Wunsch, PHP zu absolvieren.)
Die Hauptgründe, warum Scrapy gut ist, sind folgende.
――Sie können kompliziertes Schaben machen
Ich denke das kann erwähnt werden. Bisher wurden beim Scraping URL-Muster gelesen. Scrapy bietet eine Methode für Bildschirmübergänge, mit der Sie beispielsweise Formulare mit viel weniger Speicherressourcen senden können als die Browser-Automatisierung, die Sie mit *** Selen *** durchführen können.
*** Scrapy installieren ***
$pip install scrapy
*** Starten Sie das Scrapy Spider-Projekt ***
$scrapy startproject [project_name] [project_dir]
*** Liste der erstellten Spider-Projekte ***
$scrapy list
*** Erstelle eine neue Spinne im erstellten Projekt ***
#Domainnamen hinzufügen
$scrapy genspider [spider_name] mydomain.com
** Geben Sie die URL an, wenn Sie die Befehlszeile ausführen **
$scrapy crawl -a start_urls="http://example1.com,http://example2.com" [spider_name]
*** Ausgabe als CSV ***
$scrapy crawl -o csv_file_name.csv [spider_name]
*** Ausgabe als JSON ***
$scrapy crawl -o json_file_name.json [spider_name]
** Starten Sie die Scrapy-Shell **
$ scrapy shell [URL]
** Alle Seiten anzeigen **
#Antwort kann ohne Definition verwendet werden
response.body
** Alle Links erhalten **
for link in response.css('a::attr(href)'):
print link.get()
** Verwenden Sie reguläre Ausdrücke **
#Wenn eine bestimmte Datei in der href des a-Tags übereinstimmt
matched = response.css('a::attr(href)').re(r'detail\.php')
if len(matched) > 0:
print 'matched'
#Wenn ein bestimmtes Japanisch in der Zeichenfolge des a-Tags übereinstimmt
matched = response.css('a::text').re(u'Zusammenfassung')
if len(matched) > 0:
print 'matched'
** Get Tag **
#Holen Sie sich ein Tag
response.css('a')
** Holen Sie sich mit Selektor **
#Holen Sie sich ein Tag
response.css('a.link')
#Holen Sie sich mehrere Klassen<li class="page next"></li>
response.css('li.page.next')
** Relativen Pfad in URL konvertieren **
for link in response.css('a::attr(href)'):
print response.urljoin(link.get())
** Formularinformationen senden **
scrapy.FormRequest(response,formdata={"username":"login_username","password":"login_password"}
** Iterative Verarbeitung von untergeordneten Elementen des von XPath erworbenen Elements **
#Holen Sie sich das DIV-Element
divs = response.xpath('//div')
#Wiederholen Sie das P-Element in DIV
for p in divs.xpath('.//p'):
print(p.get())
** Übergang zu einer anderen Seite **
#self.parse(self,response)Als Rückruffunktion
yield scrapy.Request([url],callback=self.parse)
** Artikel erstellen (items.py direkt unter Projekt bearbeiten) ** Originalgeschichte
class Product(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
stock = scrapy.Field()
tags = scrapy.Field()
last_updated = scrapy.Field(serializer=str)
** Gehen Sie zur Detailseite, bis die Liste keine weiteren Elemente mehr enthält (es funktioniert nicht mehr so wie es ist, also fügen Sie es bitte in die Klasse ein) **
def parse(self, response):
title = a.css('::text').extract_first()
title_match = a.css('::text').re(u'Ausbildung')
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'Ausbildung')
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
--2019 / 12/06 Neu erstellt --2019 / 12/07 Bibliothekstechniken hinzugefügt --2019 / 12/09 Bibliothekstechniken hinzugefügt (Formulareingabe usw.) --2019 / 12/16 Kapitel über Artikel hinzugefügt --2019 / 12/21 Befehl hinzugefügt
Recommended Posts