动态网页抓取与npm cheerio和请求

时间:2017-09-07 00:39:14

标签: javascript node.js web-scraping cheerio

我正在尝试从具有基本网址然后是动态路由的网站抓取数据。这个特定的网站只使用数字,所以我有这个代码来获取数据:

private func setUpRealm() {

    let username = "\(LoginViewController().username.text!)"
    let password = "\(LoginViewController().password.text!)"

    SyncUser.logIn(with: SyncCredentials.usernamePassword(username: username, password: password, register: true), server: URL(string: "http://000.000.000.000:9080")!) { (user, error) in

        guard let user = user else {
            fatalError(String(describing: error))
        }

        DispatchQueue.main.async {
            let configuration = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://000.000.000.000:9080/~/realmList")!))

                    let realm = try! Realm(configuration: configuration)
                    self.lists = realm.objects(List.self).sorted(byKeyPath: "created", ascending: false)
                    self.notificationToken = self.lists.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in

                        guard (self?.collectionView) != nil else { return }

                        switch changes {
                        case .initial:
                            self?.collectionView.reloadData()
                            break

                        case .update(_, let deletions, let insertions, let modifications):
                            self?.collectionView.performBatchUpdates({
                                self?.collectionView.insertItems(at: insertions.map({ IndexPath(row: $0, section: 0)}))
                                self?.collectionView.deleteItems(at: deletions.map({ IndexPath(row: $0, section: 0)}))
                                self?.collectionView.reloadItems(at: modifications.map({ IndexPath(row: $0, section: 0)}))
                            }, completion: nil)
                            break

                        case .error(let error):
                            print(error.localizedDescription)
                            break
                        }
                    }
                }
            }
        }

但是,上面的代码不起作用,并且不向数据库添加任何内容。有谁知道什么是错的?

1 个答案:

答案 0 :(得分:0)

我不确定原因,但有一点在您编写的代码中表现奇怪的是变量i没有绑定到请求的回调范围,并且for循环将在任何回调之前完成调用。

如果这是问题,i === total应该只有一个db条目。

这可以通过执行Array.forEach来解决。