我正在使用 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 秒就会加载表单。所以我想知道如何正确获取此表单中的项目,因为它似乎提供了动态表单而不是静态表单。
最佳答案
我认为有两种方法可以解决这个问题。
第一个,正如 eLRuLL 所评论的,是实际进行 JavaScript 渲染。然而,Selenium 可能比需要的更复杂。您可以尝试使用 PhantomJS 或 Splash 等 headless 浏览器。这些 headless 浏览器将为您呈现 JavaScript。这种方法实现起来比较容易,但是对爬虫的性能确实有影响。
第二个选项实际上是抓取 XHR 请求的 HTTP 位置。在 Firefox 中,您可以使用 Firebug 扩展来过滤所有 XHR 请求并找到正确的请求。一般来说,这个选项可以提高性能,但实现起来可能更复杂。
关于python - 如何抓取延迟加载表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40738264/