Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从一个源代码中没有显示标签的网站上抓取?_Python_Xpath_Web Scraping_Lxml - Fatal编程技术网

Python 如何从一个源代码中没有显示标签的网站上抓取?

Python 如何从一个源代码中没有显示标签的网站上抓取?,python,xpath,web-scraping,lxml,Python,Xpath,Web Scraping,Lxml,我正在使用lxml和python解析一个网站。 问题是,当我通过Mozilla FireFox中的Firebug扩展检查它时,我能够看到该元素。但它在我正在阅读的页面源代码中没有显示 代码是 import urllib from lxml import etree page=urllib.urlopen(url) response=page.read() x=etree.HTML(response) company=x.xpath('//div[@class="name"]') 在通过Mozi

我正在使用lxml和python解析一个网站。 问题是,当我通过Mozilla FireFox中的Firebug扩展检查它时,我能够看到该元素。但它在我正在阅读的页面源代码中没有显示 代码是

import urllib
from lxml import etree
page=urllib.urlopen(url)
response=page.read()
x=etree.HTML(response)
company=x.xpath('//div[@class="name"]')
在通过Mozilla Firebug扩展进行检查时,可以清楚地看到class=“name”的所有div标记。但是HTML页面上没有源代码


提前感谢

div
通过一组XHR调用加载带有
class=“name”
的元素。与手动计算获取数据所需的请求不同,使用

此外,根据法律规定,网络爬网是非法的:

根据本协议,允许爬行服务, 但未经AngelList事先同意而取消服务,除非 如本协议允许,则明确禁止


页面源指定页面的初始结构,但这可以通过在页面上执行的JavaScript脚本完全改变。很可能就是这样,使得页面源代码看起来与实际运行的页面不同

因此,您需要能够执行所需JavaScript函数的东西,还需要能够检查修改后的DOM的东西。如果您使用的是Python,一个选项是使用它为Qt提供Python绑定(也许您也可以使用,但我不太熟悉),Qt本身支持基于WebKit的浏览器引擎

下面的Python2代码大致受Qt示例的启发,并在加载页面后立即打印DOM。我怀疑这对于您的目的来说还不够,因此您可能需要额外增加一点延迟,让页面中的所有JavaScript都能正常工作。目前,只有HTML标记名被写入屏幕,但是使用它的文档应该很容易修改它

#!/usr/bin/env python

from PySide import QtGui, QtCore, QtWebKit
import sys

class MyWin(QtGui.QMainWindow):
    def __init__(self, url):
        super(MyWin, self).__init__()

        self.page = QtWebKit.QWebPage(self)
        self.view = QtWebKit.QWebView(self)

        self.view.setPage(self.page)
        self.setCentralWidget(self.view)

        self.page.mainFrame().loadFinished.connect(self.loadFinished)
        self.page.mainFrame().load(QtCore.QUrl(url))

    def loadFinished(self, ok):
        print "Load finished", ok

        doc = self.page.mainFrame().documentElement()
        self.examineChildElements(doc)

    def examineChildElements(self, parent, indent = 0):

        self.printElement(parent, indent)

        elem = parent.firstChild()
        while not elem.isNull():
            self.examineChildElements(elem, indent + 2)
            elem = elem.nextSibling()

    def printElement(self, elem, indent):
        print " "*indent + elem.tagName()

def main():
    print "Enter URL:"
    url = raw_input()

    a = QtGui.QApplication(sys.argv)
    w = MyWin(url);
    w.show()
    a.exec_()

if __name__ == "__main__":
    main()

谢谢你提醒我法律条款。我将使用AngelList api