我正在尝试使用此xpath抓取this url:
//*[@class="cnnResultItem"]
它适用于chrome dev工具控制台,但scrapy spider结果为[]。
我已经完成了详尽的测试,测试了所有节点,直到我想要的节点,一切正常,包括//*[@id="mixedresults"]
。在此节点之后导致[]。
我与//*[@class="item-title"]
有完全相同的问题here。此节点之前的所有内容以及该节点之后的所有内容都将失败。
2014-10-23 03:08:55-0400 [article_spider] INFO: Spider opened
2014-10-23 03:08:55-0400 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:602
3
2014-10-23 03:08:55-0400 [scrapy] DEBUG: Web service listening on 0.0.0.0:6080
2014-10-23 03:08:55-0400 [article_spider] DEBUG: Crawled (200) <GET http://www.c
dc.gov/media/archives.htm> (referer: None)
***base_elem = ScraperElem object
***base_elem.x_path = //*[@class="item-title"]
***Found base_objects = []
2014-10-23 03:08:55-0400 [article_spider] ERROR: No base objects found!
2014-10-23 03:08:55-0400 [article_spider] INFO: Closing spider (finished)
2014-10-23 03:08:55-0400 [article_spider] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 210,
'downloader/request_count': 1,
'downloader/request_method_count/GET': 1,
'downloader/response_bytes': 12999,
'downloader/response_count': 1,
'downloader/response_status_count/200': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2014, 10, 23, 7, 8, 55, 225000),
'log_count/DEBUG': 7,
'log_count/ERROR': 1,
'log_count/INFO': 6,
'response_received_count': 1,
'scheduler/dequeued': 1,
'scheduler/dequeued/memory': 1,
'scheduler/enqueued': 1,
'scheduler/enqueued/memory': 1,
'start_time': datetime.datetime(2014, 10, 23, 7, 8, 55, 53000)}
2014-10-23 03:08:55-0400 [article_spider] INFO: Spider closed (finished)
任何想法为什么会发生这种情况将不胜感激。
答案 0 :(得分:1)
您发布的网址最初是空白的,并使用Javascript填充数据。 Scrapy不支持动态页面,您需要找出javascript请求的内容并解析它。
乍一看,您似乎想要查询和抓取
http://searchapp.cnn.com/cnn-search/query.jsp?query=ebola&ignore=mixed|article|video&start=1&npp=10|10|20&s=all&type=all&sortBy=relevance&primaryType=mixed&csiID=csi1
结果似乎是在json中,实际上更容易解析。您发布的CDC网站也填充了Javascript。您可以在Chrome开发工具中禁用JS,它会使调试更容易,因为您将看到scrapy看到的内容。