Python 如何从一个源代码中没有显示标签的网站上抓取?
我正在使用lxml和python解析一个网站。 问题是,当我通过Mozilla FireFox中的Firebug扩展检查它时,我能够看到该元素。但它在我正在阅读的页面源代码中没有显示 代码是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
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