python - requests get不到完整页面源码
巴扎黑
巴扎黑 2017-04-17 17:53:46
0
5
3348

使用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进行访问,访问成功就会返回
但是我获取到的页面源码不完整

巴扎黑
巴扎黑

全部回覆(5)
巴扎黑

存在幾個原因
1.也許有些內容是透過ajax載入的。
所以透過requests.get是得不到全剖內容的,
建議透過使用firebug等工具去確定是不是這樣的原因。

  1. 是不是登入後才能有的內容。

Ty80

我的程式碼可以取得到頁面的全部內容,但沒有用requests的proxies參數。
試試看不用代理商能否獲得完整內容呢?

我的程式碼:

import requests

headers = {
        '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'
}
html = requests.get('http://www.xicidaili.com/nn/', headers=headers).text
print html
Ty80

抓到Ubuntuer一枚....竟然還裝了主題....我就是飄過....

刘奇

1樓回答的很清楚了,應該是網頁返回是異步加載的,建議你用fiddler之類的抓包看下,是不是有異步請求!

左手右手慢动作

我來說說怎麼排查吧。 【老司機勿吐槽】

1、使用chrome的network工具進行抓包(其他工具也行),比較response和你抓取的結果。如果相同,則表示這個頁面需要透過js進行渲染。

2、如果步驟1對比後結果不一致,則考慮header內的其他字段造成的影響了。一般情況下,cookie會影響存取權限,user-agent影響dom結構和內容。主要先排查這兩點。 (有可能會有一些奇奇怪怪的header則需要特殊處理)

3、開代理測試請求排除訪問ip被封鎖等問題

4、如果確定是js渲染的頁面。解決方案有二,一是抓取api介面(需要敏銳的發現規則能力),抓包方法參考1。二是直接在伺服器上進行js渲染(相關的運算),得到最終頁面渲染的結果。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板