我正在使用Scrapy 1.2来抓取在线数据库(http://bddatabase.net/jp/weapon/)。
以下是我的代码:
class BdItemSpider(scrapy.Spider):
name = "bdspider"
start_urls = [
"http://bddatabase.net/jp/weapon/"
]
def parse(self, response):
item = BdItem()
items = response.xpath("//table[@id='WeaponTable']/tbody//tr/td/text()")
print(items.extract())
这是日志:
2016-11-22 18:23:14 [scrapy] INFO: Spider opened
2016-11-22 18:23:14 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-11-22 18:23:14 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-11-22 18:23:16 [scrapy] DEBUG: Crawled (200) <GET http://bddatabase.net/jp/weapon/> (referer: None)
['Loading data from server']
2016-11-22 18:23:16 [scrapy] DEBUG: Scraped from <200 http://bddatabase.net/jp/weapon/>
{}
2016-11-22 18:23:16 [scrapy] INFO: Closing spider (finished)
它返回从服务器加载数据消息。 我发现刷新后页面加载表格1~1.5秒。所以我想知道如何正确地获取此表单中的项目,因为它似乎提供了动态表单而不是静态表单。
答案 0 :(得分:2)
我认为有两种方法可以解决这个问题。
eLRuLL评论的第一个是实际进行JavaScript渲染。但是,Selenium可能比需要的更复杂。您可以尝试使用像PhantomJS或Splash这样的无头浏览器。这些无头浏览器将为您呈现JavaScript。这种方法相对容易实现,但确实对刮刀的性能有影响。
第二个选项实际上是抓取XHR请求的HTTP位置。在Firefox中,您可以使用Firebug扩展来过滤所有XHR请求并找到正确的请求。通常,此选项可以提高性能,但实现起来可能会更复杂。