搜尋

首頁  >  問答  >  主體

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

巴扎黑巴扎黑2802 天前3343

全部回覆(5)我來回復

  • 巴扎黑

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

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

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

    回覆
    0
  • PHP中文网

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

    我的程式碼可以取得到頁面的全部內容,但沒有用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

    回覆
    0
  • PHP中文网

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

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

    回覆
    0
  • 怪我咯

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

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

    回覆
    0
  • ringa_lee

    ringa_lee2017-04-17 17:55:46

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

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

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

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

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

    回覆
    0
  • 取消回覆