python - 如何抓取延迟加载表单?

标签 python scrapy web-crawler

我正在使用 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/

相关文章:

ruby-on-rails - 几乎没有踪迹的神秘 rails 错误

网页在加载之前被谷歌抓取

python - 每次调用时都会出现 Scapy AttributeError : 'module' object has no attribute '*'

python - 值错误 : Invalid RGBA argument: 'o'

python - 键在字典中时出现键错误

python - scipy.optimize 加载 DLL 失败?

python - Scrapy 选择直接子项

javascript - 如何使用 beautifulsoup 从 js 和 Reactjs 获取数据?

python - pymongo DuplicateKeyError - 在 upsert 期间

python - scrapyd deploy 显示 0 个蜘蛛