如何获取html页面的真实源代码?

时间:2014-05-14 14:40:35

标签: python html browser request

每当我使用像urllib2这样的标准库,请求时,pycurl我都没有获得完整的源代码。我如何获得完整的源代码,就像我从chrome,firefox等看它一样。 我想这样做:

def go_to(link):
    headers = {'User-Agent': USER_AGENT,
               'Accept': ACCEPT,
               'Accept-Encoding': ACCEPT_ENCODING,
               'Accept-Language': ACCEPT_LANGUAGE,
               'Cache-Control': CACHE_CONTROL,
               'Connection': CONNECTION,
               'Host': HOST}
    req = urllib2.Request(link, None, headers)
    response = urllib2.urlopen(req)
    return response.read()

谢谢!

抱歉我的英语不好。

UPD: 这是浏览器的完整代码:

 <td colspan="1"><font class="spy1">1</font> <font class="spy14">192.3.10.113<script type="text/javascript">document.write("<font class=spy2>:<\/font>"+(TwoFiveFiveSix^OneOneSix)+(Zero0FourFour^ZeroSevenSeven)+(TwoFiveFiveSix^OneOneSix)+(TwoFiveFiveSix^OneOneSix))</script><font class="spy2">:</font>8088</font></td>

这不是我脚本的完整代码:

<font class="spy14">192.3.10.113<script type="text/javascript">document.write("<font class=spy2>:<\/font>"+(Eight7FiveSix^Seven1One)+(FiveZeroTwoOne^Two3Zero)+(Eight7FiveSix^Seven1One)+(Eight7FiveSix^Seven1One))</script></font>

2 个答案:

答案 0 :(得分:2)

由于形成网页可能涉及javascript,AJAX调用,为了确保您获得与浏览器中相同的源代码,您需要使用实际使用真实浏览器的工具,比如selenium

from selenium import webdriver

browser = webdriver.Firefox()
browser.get(link)

print browser.page_source

答案 1 :(得分:0)

最佳解决方案是:

import sys  
from PyQt4.QtGui import *  
from PyQt4.QtCore import *  
from PyQt4.QtWebKit import *  

class Render(QWebPage):  
  def __init__(self, url):  
    self.app = QApplication(sys.argv)  
    QWebPage.__init__(self)  
    self.loadFinished.connect(self._loadFinished)  
    self.mainFrame().load(QUrl(url))  
    self.app.exec_()  

  def _loadFinished(self, result):  
    self.frame = self.mainFrame()  
    self.app.quit()  

url = 'http://webscraping.com'  
r = Render(url)  
html = r.frame.toHtml() 

来源:http://webscraping.com/blog/Scraping-JavaScript-webpages-with-webkit/

<强> UPD: 输出类型是QString。 如果要将其转换为字符串使用

html = r.frame.toHtml().toUtf8().data()