POST Ich denke, dass ich sehr großen Gefallen fragen werde, wie ich mit diesem Problem mehrere Tage kämpfe. Ich habe alles versucht (in meinem besten Wissen) und immer noch kein Ergebnis. Ich mache etwas falsch, kann aber immer noch nicht herausfinden, was es ist. Also vielen Dank an alle, die bereit sind, zu diesem Abenteuer zu gehen. Erste Dinge zuerst: Ich versuche, POST-Methode zu verwenden, um Informationen in das Formular zu posten, das auf delta.com Wie immer mit diesen Websites ist es kompliziert, wie sie in den Sitzungen und Cookies und Javascript sind, so kann es ein Problem sein Dort. Ich verwende Codebeispiel, das ich in stackoverflow gefunden habe: Using MultipartPostHandler to POST form-data with Python Und hier ist mein Code, den ich für Delta-Web-Seite optimiert.PYTHON SCRAPY Kann nicht Informationen zu FORMS,
from scrapy.selector import HtmlXPathSelector
from scrapy.http import FormRequest, Request
from delta.items import DeltaItem
from scrapy.contrib.spiders import CrawlSpider, Rule
class DmozSpider(CrawlSpider):
name = "delta"
allowed_domains = ["http://www.delta.com"]
start_urls = ["http://www.delta.com"]
def start_requests(self, response):
yield FormRequest.from_response(response, formname='flightSearchForm',url="http://www.delta.com/booking/findFlights.do", formdata={'departureCity[0]':'JFK', 'destinationCity[0]':'SFO','departureDate[0]':'07.20.2013','departureDate[1]':'07.28.2013','paxCount':'1'},callback=self.parse1)
def parse1(self, response):
hxs = HtmlXPathSelector(response)
sites = hxs.select('//')
items = []
for site in sites:
item = DeltaItem()
item['title'] = site.select('text()').extract()
item['link'] = site.select('text()').extract()
item['desc'] = site.select('text()').extract()
items.append(item)
return items
Wenn ich Spinne im Terminal zu kriechen anweisen, ich sehe:
scrapy crawl delta -o items.xml -t xml
2013-07-01 13:39:30+0300 [scrapy] INFO: Scrapy 0.16.2 started (bot: delta)
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Enabled extensions: FeedExporter, LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Enabled item pipelines:
2013-07-01 13:39:30+0300 [delta] INFO: Spider opened
2013-07-01 13:39:30+0300 [delta] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023
2013-07-01 13:39:30+0300 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
2013-07-01 13:39:33+0300 [delta] DEBUG: Crawled (200) <GET http://www.delta.com> (referer: None)
2013-07-01 13:39:33+0300 [delta] INFO: Closing spider (finished)
2013-07-01 13:39:33+0300 [delta] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 219,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 27842,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2013, 7, 1, 10, 39, 33, 159235),
'log_count/DEBUG': 7,
'log_count/INFO': 4,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2013, 7, 1, 10, 39, 30, 734090)}
2013-07-01 13:39:33+0300 [delta] INFO: Spider closed (finished)
Wenn Sie mit Beispiel von Link vergleichen Ich sehe nicht, dass ich auch POST-Methode zu machen geschaffen, wenn ich fast bin mit der gleiche Code. Ich habe es sogar mit sehr einfachen HTML/PHP-Form aus W3schools versucht, die ich auf den Server gestellt habe, aber das selbe dort. Was auch immer ich getan habe, nie geschafft, POST zu erstellen. Ich denke, das Problem ist einfach, aber als nur Python-Wissen, das ich habe, ist Scrapy und alle Scrapy, was ich Online (ich es ist gut dokumentiert) und von Beispielen gefunden, aber immer noch ist es nicht genug für mich. Wenn also jemand wenigstens den richtigen Weg zeigen könnte, wäre das eine große Hilfe.
wird die cite lassen Sie Beiträge machen, werfen Sie einen Blick auf die cite 'robot.txt' –
Hm ... guter Punkt, aber ich habe den gleichen Code (http://www.w3schools.com/php/php_forms .asp) um das Formular zu testen, das ich auf meinem Server platziert habe und ich habe keine robot.txt Datei. Es gab mir das gleiche Ergebnis. –