2014-12-05 19 views

risposta

11

Prima di tutto, se è per scopi di debug o di test, è possibile utilizzare il Scrapy shell:

$ cat index.html 
<div id="test"> 
    Test text 
</div> 

$ scrapy shell index.html 
>>> response.xpath('//div[@id="test"]/text()').extract()[0].strip() 
u'Test text' 

ci sono different objects available in the shell durante la sessione, come response e request.


In alternativa, è possibile creare un'istanza di un HtmlResponse class e fornire la stringa HTML in body:

>>> from scrapy.http import HtmlResponse 
>>> response = HtmlResponse(url="my HTML string", body='<div id="test">Test text</div>') 
>>> response.xpath('//div[@id="test"]/text()').extract()[0].strip() 
u'Test text' 
+0

grazie alecxe, sto usando Selenio becuase di qualche ajaxiness. Voglio convertire driver.page_source nello stesso oggetto di resposne in modo che possa riutilizzare alcuni estrattori (usando selettori css e xpath) invece di dover ricorrere a lxml. Penso che la tua seconda opzione sia quella di cui ho bisogno. – yayu

+1

@yayu quindi, probabilmente non è necessario creare una risposta HTML, ma piuttosto un 'Selettore', vedere http://stackoverflow.com/questions/18836286/scraping-with-scrapy-and-selenium e http: //stackoverflow.com/questions/17975471/selenium-with-scrapy-for-dynamic-page. Potrebbe aiutare. Grazie. – alecxe

+0

grazie. Lo esaminerò. – yayu