検索

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

python - requests get不到完整页面源码

使用requests进行get只获取到了一部分html源码,下面是我的代码

def get_url(self,url=None,proxies=None):
    header = {
        'User-Agent' : 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0',
        'Content-Type': 'application/x-www-form-urlencoded',
        'Connection' : 'Keep-Alive',
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
        }
    for prox in proxies:
        try:
            r=requests.get(url,proxies=prox,headers=header)
            if r.status_code!=200:
                continue
            else:
                print "使用{0}连接成功>>".format(prox)
                return r.content
        except Exception, e:
            return None

proxies参数是一个代理列表,这段代码会尝试使用proxies进行访问,访问成功就会返回
但是我获取到的页面源码不完整

巴扎黑巴扎黑2804日前3354

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

  • 巴扎黑

    巴扎黑2017-04-17 17:55:46

    理由はいくつかあります
    1. 一部のコンテンツが ajax を通じてロードされている可能性があります。
    したがって、requests.get では完全なプロファイルの内容を取得できません。
    これが原因かどうかを判断するには、firebug などのツールを使用することをお勧めします。

    1. このコンテンツはログイン後にのみ利用可能ですか?

    返事
    0
  • PHP中文网

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

    私のコードはページのすべてのコンテンツを取得できますが、リクエストのプロキシパラメータを使用しません。
    エージェントを使用せずに完全なコンテンツを入手できるかどうか試してみませんか?

    私のコード:

    リーリー

    返事
    0
  • PHP中文网

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

    Ubuntuer を見つけました...テーマもインストールしました...通り過ぎただけです...

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 17:55:46

    1 階の答えは非常に明確です。返された Web ページは非同期でロードされるはずです。非同期リクエストがあるかどうかを確認するために fiddler を使用することをお勧めします。

    返事
    0
  • ringa_lee

    ringa_lee2017-04-17 17:55:46

    トラブルシューティングの方法を説明します。 [高齢ドライバーは文句を言わない]

    1. Chrome のネットワーク ツールを使用してパケットをキャプチャし (他のツールも使用できます)、応答をキャプチャした結果と比較します。それらが同じである場合、このページは js を介してレンダリングする必要があることを意味します。

    2. ステップ 1 の結果に一貫性がない場合は、ヘッダー内の他のフィールドの影響を考慮してください。一般に、Cookie はアクセス権に影響し、ユーザー エージェントは DOM 構造とコンテンツに影響します。まずは主にこの2点を確認してください。 (特殊な処理を必要とする奇妙なヘッダーが存在する可能性があります)

    3. IP へのアクセスがブロックされているなどの問題をトラブルシューティングするには、プロキシ テスト リクエストを開きます

    4. js レンダリングされたページであると判断された場合。解決策は 2 つあります。1 つは API インターフェイスをキャプチャすることです (パケット キャプチャの方法については、1 を参照してください)。 2 つ目は、サーバー上で直接 js レンダリング (関連操作) を実行して、最終的なページのレンダリング結果を取得する方法です。

    返事
    0
  • キャンセル返事