使用pythonpyqt使用Javascript内容进行Web抓取
我现在正在执行一项任务,系统地从一个似乎由javascript呈现的课程列表中删除内容。我在web上使用PyQt4遵循了一些脚本,但失败了(我在下面复制了这些脚本)。更准确地说,该脚本在某些网站上使用javascript,通过单击特定链接加载内容。然而,以下网站(ouhk,我在下面的脚本中复制的链接)似乎没有为用户提供指向特定内容的链接,即节目信息、节目结构和费用等。相反,它使用标签容器和FTP存储和加载信息(我从其源代码中找到) 我想知道是否有任何方法可以修改下面的脚本,这样我就可以使用PyQt4刮取这些内容,或者我必须寻找其他方法来达到这个目的使用pythonpyqt使用Javascript内容进行Web抓取,javascript,python,web-scraping,pyqt,Javascript,Python,Web Scraping,Pyqt,我现在正在执行一项任务,系统地从一个似乎由javascript呈现的课程列表中删除内容。我在web上使用PyQt4遵循了一些脚本,但失败了(我在下面复制了这些脚本)。更准确地说,该脚本在某些网站上使用javascript,通过单击特定链接加载内容。然而,以下网站(ouhk,我在下面的脚本中复制的链接)似乎没有为用户提供指向特定内容的链接,即节目信息、节目结构和费用等。相反,它使用标签容器和FTP存储和加载信息(我从其源代码中找到) 我想知道是否有任何方法可以修改下面的脚本,这样我就可以使用PyQ
import sys
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import *
from lxml import html
from bs4 import BeautifulSoup
#import urllib.request
#from urllib.parse import urljoin
#Take this class for granted.Just use result of rendering.
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://www.ouhk.edu.hk/wcsprd/Satellite?pagename=OUHK/tcSchSing2014&c=C_LIPACE&cid=1450268562831&lang=eng&sch=LIP'
r = Render(url)
result = r.frame.toHtml()
print result
了解如何使用selenium库!我用这个库浏览了多个网站。人们说它很慢,但就我而言,它工作得很好 另外,如果您对web抓取有点陌生,那么请查看XPath是用于抓取那些本来很难获取的元素的。使用Xpath,在chrome浏览器中只需右键单击页面,Inspect元素,展开所有标记,然后右键单击要刮取的标记并单击复制Xpath,然后可以将路径粘贴到selenium库中的模块中。非常简单,这里有一个硒信息链接
您还需要下载一个chrome驱动程序,在YouTube上查找,有一些很棒的视频可以设置它!谢谢你的评论。我还在其他一些任务中使用selenium。但我认为这样做的缺点是,在获取源代码之前,您必须等待页面加载,因此会大大降低处理速度。这就是为什么我通常使用Beautifulsoup来处理网页。还是我错过了什么?这是一种通过获取页面源代码而不完全加载页面来使用selenium的方法吗?嗯,就selenium而言,我不确定这一点(速度对我来说通常不是问题),我没有意识到BS可以在不加载页面的情况下获取页面源代码。对不起,我帮不上忙,但这是一个整洁的功能,谢谢通知!是的,BS可以通过一起使用“urllib.request”库来获取网页的源代码,比如“resp=urllib.request.urlopen(url_text)”,然后使用BS来解析它:“soup=beautifulsou(resp,from_encoding=resp.info().get_param('charset')”。你应该试试看。享受吧!非常感谢,我一定会的!!