javascript - 使用 Python PyQt 使用 Javascript 内容进行 Web 抓取

标签 javascript python web-scraping pyqt

我现在正在执行一项任务,从似乎由 javascript 呈现的类(class)列表中系统地抓取内容。我在网上使用 PyQt4 遵循了一些脚本但失败了(我在下面复制了)。更准确地说,该脚本在某些使用 javascript 的网站上运行,通过单击其特定链接来加载内容。但是,下面的网站(ouhk,我在脚本下面复制的链接)似乎并没有将用户引导到特定内容的链接,即Program Information,Program Structure and Fee等,而是使用标签容器和FTP进行存储和加载信息(我从其源代码中找到的)。

我想知道是否有修改以下脚本以便我可以使用 PyQt4 抓取这些内容,或者我必须寻找其他方法来实现此目的?

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 库!我已经用这个库抓取了多个网站。人们说它很慢,但就我的目的而言,它效果很好。

此外,如果您对网络抓取有点陌生,请查看 Xpaths 用于抓取否则难以获取的元素。使用 Xpath,您需要在 chrome 浏览器中做的就是右键单击页面,检查元素,展开所有标签,然后右键单击要抓取的标签并单击复制 Xpath,然后您可以将路径粘贴到模块中 Selenium 库。真的很简单,这里是 selenium 信息的链接。

http://selenium-python.readthedocs.io/

关于javascript - 使用 Python PyQt 使用 Javascript 内容进行 Web 抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39620351/

相关文章:

Python xlsxwriter 不会在退出代码 -1 上创建工作簿

python - 来自邻接表的嵌套 JSON

javascript - 获取 Python 脚本标签内的变量数据或从 js 添加的内容

web-scraping - 是否可以使用 Scrapy 从 Whatsapp Web 中抓取所有短信?

python - 仅当 div 类包含某个单词时才使用 xpath 提取信息

javascript - jquery 并在点击时更改 html 5 视频源

javascript - 用于抓取的 headless chrome Nodejs 异步循环

javascript - jQuery 动画图像 : left and right with a flip/rotation effect

python - 使用python将文件夹中的所有pdf转换为文本文件并将它们存储在不同的文件夹中

javascript - 使用 jquery 通过单选更改输入文本字段值