ホームページ  >  に質問  >  本文

python - 关于scrapy爬虫AJAX页面

当点击加载的时候,用Chrome 开发者工具,可以看到Network中,实际请求的链接为:

FormData为:

urlencode:

        ...
        data = response.css('.zh-general-list::attr(data-init)').extract()
        param = json.loads(data[0])
        topic_id = param['params']['topic_id']
        # hash_id = param['params']['hash_id']
        hash_id = ""
        for i in range(32):
            params = json.dumps({"topic_id": topic_id,"hash_id": hash_id, "offset":i*20})
            payload = {"method": "next", "params": params, "_xsrf":_xsrf}
            print payload
            yield scrapy.Request(
                    url="https://m.zhihu.com/node/TopicsPlazzaListV2?" + urlencode(payload),
                    headers=headers,
                    meta={
                        "proxy": proxy,
                        "cookiejar": response.meta["cookiejar"],
                    },
                    callback=self.get_topic_url,
            )
{'_xsrf': u'161c70f5f7e324b92c2d1a6fd2e80198', 'params': '{"hash_id": "", "offset": 140, "topic_id": 253}', 'method': 'next'}
^C^C^C{'_xsrf': u'161c70f5f7e324b92c2d1a6fd2e80198', 'params': '{"hash_id": "", "offset": 160, "topic_id": 253}', 'method': 'next'}
2016-05-09 11:09:36 [scrapy] DEBUG: Retrying <GET https://m.zhihu.com/node/TopicsPlazzaListV2?_xsrf=161c70f5f7e324b92c2d1a6fd2e80198&params=%7B%22hash_id%22%3A+%22%22%2C+%22offset%22%3A+80%2C+%22topic_id%22%3A+253%7D&method=next> (failed 1 times): [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'SSL3_READ_BYTES', 'ssl handshake failure')]>]
2016-05-09 11:09:36 [scrapy] DEBUG: Retrying <GET https://m.zhihu.com/node/TopicsPlazzaListV2?_xsrf=161c70f5f7e324b92c2d1a6fd2e80198&params=%7B%22hash_id%22%3A+%22%22%2C+%22offset%22%3A+40%2C+%22topic_id%22%3A+253%7D&method=next> (failed 1 times): [<twisted.python.failure.Failure OpenSSL.SSL.Error: [('SSL routines', 'SSL3_READ_BYTES', 'ssl handshake failure')]>]
黄舟黄舟2741日前1302

全員に返信(4)返信します

  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:46:32

    DEBUG: Retrying <GET これほど大きなプロンプトからそれを見分けるのは困難です。 。 。パケットをキャプチャするときのリクエストはポストです。スクレイピーを使用するときになぜ get を使用するのでしょうか? 。 。

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:46:32

    クローラの作成は、一度に行うのではなく、段階的に行う必要があります。そうしないと、何が問題なのかが分からなくなります。通常、最初に必要なデータを取得してから、解析してフィルタリングする必要があります。
    最初にリクエストを送信して、必要なデータを取得できるかどうかを確認します。取得できない場合は、URL が間違っているか、傍受されている可能性があります。

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:46:32

    リーリー

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 17:46:32

    少年はあなたに大きな動きを教えます。

    返事
    0
  • キャンセル返事