2013-06-18 20 views
5

Ho appena iniziato a conoscere scrapy. Ora sto cercando di eseguire la scansione seguendo i tutorial. Ma ho difficoltà a scansionare il testo da div.scrapy - come ottenere il testo da 'div'

Questo è items.py

from scrapy.item import Item, Fied 
class DmozItem(Item): 
    name = Field() 
    title = Field() 
    pass 

Questo è dmoz_spider.py

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.item import Item 

from dmoz.items import DmozItem 

class DmozSpider(BaseSpider): 
    name = "dmoz" 
    allowed_domains = ["roxie.com"] 
    start_urls = ["http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594"] 

    def parse(self, response): 
      hxs = HtmlXPathSelector(response) 
      sites = hxs.select('//div[@id="eventdescription"]') 
      items = [] 
      for site in sites: 
        item = DmozItem() 
        item['name'] = hxs.select("text()").extract() 
        items.append(item) 
      return items 

e ora sto cercando di strisciare dalla cartella principale comandando questo:

scrapy crawl dmoz -o scraped_data.json -t json 

Ma il file è stato creato con solo '['.

Funziona perfettamente nella console (comandando ogni selezione), ma in qualche modo non funziona come script. Sono davvero un antipasto di scrapy. Potresti ragazzi fammi sapere come posso ottenere i dati in "div"? Grazie in anticipo.

* Inoltre, questo è ciò che ottengo.

2013-06-19 08:43:56-0700 [scrapy] INFO: Scrapy 0.16.5 started (bot: dmoz) 
/System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python/twisted/web/microdom.py:181: SyntaxWarning: assertion is always true, perhaps remove parentheses? 
assert (oldChild.parentNode is self, 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled extensions: FeedExporter, LogStats, TelnetConsole, CloseSpider, WebService, CoreStats, SpiderState 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled downloader middlewares: HttpAuthMiddleware, DownloadTimeoutMiddleware, UserAgentMiddleware, RetryMiddleware, DefaultHeadersMiddleware, RedirectMiddleware, CookiesMiddleware, HttpCompressionMiddleware, ChunkedTransferMiddleware, DownloaderStats 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled spider middlewares: HttpErrorMiddleware, OffsiteMiddleware, RefererMiddleware, UrlLengthMiddleware, DepthMiddleware 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Enabled item pipelines: 
2013-06-19 08:43:56-0700 [dmoz] INFO: Spider opened 
2013-06-19 08:43:56-0700 [dmoz] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6023 
2013-06-19 08:43:56-0700 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080 
2013-06-19 08:43:56-0700 [dmoz] DEBUG: Crawled (200) <GET http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594> (referer: None) 
2013-06-19 08:43:56-0700 [dmoz] INFO: Closing spider (finished) 
2013-06-19 08:43:56-0700 [dmoz] INFO: Dumping Scrapy stats: 
{'downloader/request_bytes': 281, 
'downloader/request_count': 1, 
'downloader/request_method_count/GET': 1, 
'downloader/response_bytes': 27451, 
'downloader/response_count': 1, 
'downloader/response_status_count/200': 1, 
'finish_reason': 'finished', 
'finish_time': datetime.datetime(2013, 6, 19, 15, 43, 56, 569164), 
'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, 6, 19, 15, 43, 56, 417661)} 
2013-06-19 08:43:56-0700 [dmoz] INFO: Spider closed (finished) 
+0

Solo per verificare, esattamente da che punto si desidera riempire il campo del nome? "DOC FEST: MY WAY TO OLYMPIA" o qualcos'altro? – Talvalin

+0

Sì, desidero anche ottenere la descrizione del film e del file img. Potresti farmi sapere cosa mi sono perso? – user2499003

risposta

6

Posso ottenere il titolo del film, ma sono un po 'schifoso con XPath quindi la descrizione XPath ti darà tutto all'interno dell'elemento <div class="tabbertab" title="Synopsis">. Non è l'ideale, ma è un punto di partenza. Ottenere l'URL dell'immagine è lasciato come esercizio per l'OP. :)

from scrapy.item import Item, Fied 
class DmozItem(Item): 
    title = Field() 
    description = Field() 
    pass 

class DmozSpider(BaseSpider): 
    name = "test" 
    allowed_domains = ["roxie.com"] 
    start_urls = ["http://www.roxie.com/events/details.cfm?eventID=4921702B-9E3D-8678-50D614177545A594"] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     item = DmozItem() 
     item['title'] = hxs.select('//div[@style="width: 100%;"]/text()').extract() 
     item['description'] = hxs.select('//div[@class="tabbertab"]').extract() 
     return item 
+2

Funziona sicuramente! Grazie Talvalin. Grazie al tuo aiuto, posso eseguire la scansione di tutte le altre informazioni che voglio! – user2499003

+0

Buono a sapersi. Bene, se entrambe le risposte fossero utili, allora scegli la più utile come risposta accettata e upvote sia per favore. :) – Talvalin

2

basta sostituire

item['name'] = hxs.select("text()").extract() 

con

item['name'] = site.select("text()").extract() 

Speranza che aiuta.

+0

Oh, l'ho provato, ma non funziona. Ancora fa il file JSON che contiene solo '['. – user2499003

+0

Ok, ho modificato la risposta (rimossa [0]) - in modo che ci sia la lista nel valore del nome json di uscita. – alecxe

+1

Yei! Era un problema di percorso. Grazie alecxe! A causa del tuo commento che funziona per me, ho iniziato tutte le opere su un percorso diverso, e funziona. – user2499003

Problemi correlati