Kann mir jemand helfen, die Erfassung des Antwortstatuscodes für jede Crawling-Anfrage zu verstehen, die meine Scrapy Spider gemacht hat. Ich war in der Lage, die Ausgabe für Resp-Code 200 zu bekommen, aber wenn die Website 404 Fehler hat, schreibt es keine Ausgabe einschließlich 301 und 302 auch.Crawlen von Webseiten und Erfassen verschiedener Antwortstatuscodes mithilfe von Python Scrapy
Hier ist der Code, den ich für eine andere Website implementiert habe, und einen Domänennamen mit meinem Namen als Referenz hinzugefügt.
import scrapy
import requests
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from scrapy.spiders import Rule, CrawlSpider
class TestSpider(CrawlSpider):
name = 'TestSpider'
handle_httpstatus_list = [404]
resp_log_file = 'C:\\resp'
ok_log_file = 'C:\\alright'
bad_log_file = 'C:\\badresp'
redirect_log_file = 'C:\\redirect'
allowed_domains = ['santhosh.com']
start_urls = ['santhosh.com/']
# This spider has one rule: extract all (unique and canonicalized) links, follow them and parse them using the parse_items method
rules = [
Rule(
LinkExtractor(
canonicalize=True,
unique=True
),
follow=True,
callback="parse_item"
)
]
def parse_item(self, response):
# The list of items that are found on the particular page
items = []
res = Selector(response)
self.append(self.resp_log_file, str(response))
# Only extract canonicalized and unique links (with respect to the current page)
links = LinkExtractor(canonicalize=True, unique=True).extract_links(response)
try:
if response.status == 404:
## 404 tracciate anche separatamente
self.append(self.bad_log_file, response.url)
elif response.status == 200:
## printa su ok_log_file
self.append(self.ok_log_file, response.url)
elif response.status == 302:
## printa su ok_log_file
self.append(self.redirect_log_file, response.url)
else:
self.append(self.bad_log_file, response.url)
except Exception, e:
pass
return None
def append(self, file, string):
print " Writing content to File "
file = open(file, 'a')
file.write(string+"\n")
file.close()
Ich habe Fragen Antwortcode Erfassung im Zusammenhang gesehen, aber sie waren nicht gerade ähnlich wie meine Anfragen und damit diese neue Stelle geschaffen. Wenn bereits eine Frage verfügbar ist, bitte ich Sie, dies zu ignorieren und mich dort weiterzuleiten. Danke im Voraus!
wikipedia: [Liste der HTTP-Statuscodes] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) – furas
'200' = "Seite ohne Probleme bekommen",' 404' = „Seite nicht gefunden ",' 30x' = "Weiterleitung wegen XXX". Wenn Scrapy die Seite nicht lesen kann (dh "404"), ruft sie den Parser nicht auf. – furas
Verwenden Sie nicht 'exception Exception, e: pass', weil Sie möglicherweise einen unerwarteten Fehler haben und Sie es nicht wissen. Atleast display es außer Ausnahme, e: print ("ERROR:", e) ' – furas