python爬取网页文本,python爬取js加载的数据

  python爬取网页文本,python爬取js加载的数据

  您必须通过调用ajax js来加载动态内容。

  我真的不知道怎么用PyQt,但是我希望我能做到。HTML如下所示:

  荷兰

  您可以使用下面的简单代码通过PyQt呈现页面:

  defrender(source_html):

  进口系统

  来自pyqt5。qtcoreimportqeventloop

  来自pyqt5。qtwidgetsimportqapplication

  来自pyqt5。qtwebenginewidgetimport qwebengineview

  类渲染器(qwebengineview):

  def __init__(self,html):

  self.html=无

  self . app=QA application(sys . argv)).

  QWebEngineView。__init__(self)

  自. loadfinished.connect(自。_加载完成)。

  是self.sethtml(html)

  而self.html则没有:

  self.app.process事件(qeventloop . excludeuserinputevents)qeventloop . excludesocketnotifiers

  self.app.quit(

  def_callable(self,data):

  self.html=data

  def_loadfinished(self,result):

  self.page()。tohtml)自我。_callable))).

  返回到(source _ html)。超文本标记语言

  导入请求

  sample _ html=requests . get(computing.com/software/pyqt/河岸https://号)。文本

  打印(呈现)sample_html))

  如何通过运行“onclick”获取内容?

  解决方法:

  这是一个老问题.

  从javascript运行PyQt函数:

  可能有很多方法可以实现,但是用QWebChannel就解决了。然后,从html中调用js函数,并使用Web通道与Qt通信。

  将需要Qwebchannel.js。我从本地计算机上的Qt5示例目录中获得了它。网络上很多地方都有相同的文件。找找那个。

  使用__init__创建网络通道。

  self . web channel=Qt web channel . q web channel(self))。

  然后,设置webengineview主页使用这个通道,并注册PyQt和js之间要共享的对象。

  self.page()。setwebchannel ) (self.webchannel).

  Self.web channel.register对象(我的频道),Self)。

  英寸js(或者。html),设置网络通道。

  var MyChannel=null

  QWEBChannel (Qt。WebChannelTransport,函数(通道))。

  我的频道=channel . objects . my channel;

  );

  这就是qwebchannel.js工作的地方。您的js或html文件必须包含它。对于我来说,在我做任何事情之前,我会在scriptsrc= scripts/qweb channel . js /scriptsrc中加载其他js

  现在,您已经设置了通过通道从js调用PyQt,但是您能调用什么呢?一些装饰PyQt插槽的东西。因此,举例来说,如果您想在javascript中使用字符串作为参数来调用render foo 函数,您可以创建:

  @qtcore.pyqtslot(str))).

  deffoo(self,some_tring):

  print(somestring:% s)% some _ string)))))。

  …然后在js文件或index.html中调用mychannel.foo(whatever )。它可以作为onclick或从onclick调用的其他函数体来完成。

  mychannel.foo中的对话( whatever ):调用mychannel是赋给通道中注册的对象的名字(python中的),调用新的QWebChannel。

  另外,如果想从PyQt调用js函数,也很简单。在这种情况下,就打电话。

  Self.page()。runJavaScript)、somejsfunction)等等)。)

  因为它被称为异步,所以如果您需要对响应做任何事情,您必须设置一个响应处理程序。

  Self.page()。runJavaScript)、somejsfunction)等等)。自我。_ _回调)

  …然后定义一个回调(可能是呈现器的成员):

  def__callback(self,response):

  If响应:

  Print (handlingjsresponse:% s,response))。

  标签:pyqt5,pyqt,pyqt4,javascript,jquery

  来源:https://codeday.me/bug/2019, 357.html,2022年11月11日。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: