Wenn Sie ein Programm ausgeführt haben, das eine mit python3 geschriebene Seite crawlt Eines Tages bekam ich so einen Fehler.
Access to XMLHttpRequest at 'https://target' from origin 'https://xxxxxxxxx' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Die Implementierung zu diesem Zeitpunkt ist wie folgt.
import requests
res = requests.get("https://target") #Webapi-URL
Die Seite, die das Ziel des Crawls war, ist eine Seite, die Daten mit Bootstrap usw. liest und anzeigt. Ich habe während des Renderns auf einem Webapi gecrawlt, das vom Bootstrap aufgerufen wurde.
Mit Selendraht kriechen. Der Webtreiber von selenium kann nur gerenderte Webseiten verarbeiten, wodurch auch beim Rendern auf die Ergebnisse von Abfragen zugegriffen werden kann. https://pypi.org/project/selenium-wire/
from seleniumwire import webdriver
driver = webdriver.Chrome()
driver.get("https://target") #URL der TOP-Seite
for request in driver.requests:
if "xxxxx" in request.url: #Bedingungen für die Eingrenzung der URLs, für die Sie Ergebnisse erzielen möchten (Webapi-URL)
response_text = request.response.body.decode()
Ich habe in diesem Artikel studiert. https://qiita.com/att55/items/2154a8aad8bf1409db2b Ich verstehe, es ist definitiv notwendig. Weil es Menschen gibt, die Dinge wie sich selbst tun.
Ich habe nicht viel recherchiert, aber es scheint, dass es nicht einfach geht. Also habe ich aufgegeben. In CORS scheint die Preflight-Anforderung zuerst übersprungen zu werden und dann tatsächlich GET oder POST. https://developer.mozilla.org/ja/docs/Glossary/Preflight_request
Für diesen Artikel werden Preflight-Anforderungen nach Bedarf automatisch vom Browser ausgegeben. Front-End-Entwickler müssen solche Anfragen normalerweise nicht selbst stellen. Es heißt ` Der Browser macht das für mich = Ich habe es aufgegeben zu denken, dass der Weg zum Fliegen verborgen ist. Selbst wenn Sie etwas tun, werden Artikel mit der Fetch-API oder XMLHttpRequest veröffentlicht, sodass Sie sie anscheinend nur mit Javascript ausführen können.
Weil es Javascript ist. Es scheint, dass die Fetch-API mit NodeJS verwendet werden kann. https://www.npmjs.com/package/node-fetch
Recommended Posts