【问题标题】:Web Scraping with Javascript Contents using Python PyQt使用 Python PyQt 使用 Javascript 内容进行网页抓取
【发布时间】:2017-01-29 22:16:38
【问题描述】:

我现在正在执行一项任务,即从似乎由 javascript 呈现的课程列表中系统地抓取内容。我在网上使用 PyQt4 跟踪了一些脚本,但失败了(我在下面复制了)。更准确地说,该脚本在一些带有 javascript 的网站上工作,这些网站通过单击其特定链接来加载内容。但是,下面的网站(ouhk,我在脚本下面复制的链接)似乎没有携带用于将用户定向到特定内容的链接,即节目信息、节目结构和费用等,而是使用标签容器和 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

【问题讨论】:

    标签: javascript python web-scraping pyqt


    【解决方案1】:

    考虑使用 selenium 库!我已经用这个库抓取了多个网站。人们说它很慢,但就我的目的而言,它工作得很好。

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

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

    【讨论】:

    • 您还需要下载 chrome 驱动程序,在 YouTube 上查看,有一些很棒的视频可以设置它!
    • 感谢 cmets。我还在其他一些任务中使用硒。但是我认为这样做的缺点是您必须等待页面加载才能获取其源代码,因此会大大减慢该过程。这就是为什么我通常在网页报废中使用 Beautifulsoup。还是我错过了什么?这是通过获取页​​面源代码而不完全加载页面来使用 selenium 的一种方式吗?
    • 嗯,就硒而言,我不确定(速度通常不是我的问题),我没有意识到 BS 可以在不加载页面的情况下获取页面源。抱歉,我帮不上忙,但这是一个很好的功能,感谢您的告知!
    • 是的,BS 可以通过使用 'urllib.request' 库一起获取网页的源代码,例如 'resp = urllib.request.urlopen(url_text)' 然后使用 BS 解析它: 'soup = BeautifulSoup(resp, from_encoding=resp.info().get_param('charset'))'。你应该试试看。享受吧!
    • 非常感谢,我一定会的!!
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    相关资源
    最近更新 更多