使用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进行访问,访问成功就会返回
但是我获取到的页面源码不完整
巴扎黑2017-04-17 17:55:46
理由はいくつかあります
1. 一部のコンテンツが ajax を通じてロードされている可能性があります。
したがって、requests.get では完全なプロファイルの内容を取得できません。
これが原因かどうかを判断するには、firebug などのツールを使用することをお勧めします。
このコンテンツはログイン後にのみ利用可能ですか?
PHP中文网2017-04-17 17:55:46
私のコードはページのすべてのコンテンツを取得できますが、リクエストのプロキシパラメータを使用しません。
エージェントを使用せずに完全なコンテンツを入手できるかどうか試してみませんか?
私のコード:
リーリー怪我咯2017-04-17 17:55:46
1 階の答えは非常に明確です。返された Web ページは非同期でロードされるはずです。非同期リクエストがあるかどうかを確認するために fiddler を使用することをお勧めします。
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 レンダリング (関連操作) を実行して、最終的なページのレンダリング結果を取得する方法です。