Как загрузить несколько страниц по одной в QWebPage

Я пытаюсь сканировать страницы новостей для комментариев. После некоторых исследований я обнаружил, что в основном веб-сайты используют для этого iframe. Я хочу получить "источник" iframe. Я использую QtWebKit в Python, используя PySide. Это на самом деле работает, но только один раз. Это не загрузка других веб-страниц. Я использую следующий код:

import sys  
import pymysql
from PySide.QtGui import *  
from PySide.QtCore import *  
from PySide.QtWebKit import *
from pprint import pprint
from bs4 import BeautifulSoup

class Render(QWebPage):
  def __init__(self, url):
    try:
      self.app = QApplication(sys.argv)
    except RuntimeError:
      self.app = QCoreApplication.instance()
    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()


def visit(url):
  r = Render(url)
  p = r.frame.toHtml()
  f_url = str(r.frame.url().toString())
  return p

def is_comment_url(url):
  lower_url = url.lower()
  n = lower_url.find("comment")
  if n>0:
    return True
  else:
    return False

with open("urls.txt") as f:
  content = f.read().splitlines()
list_of_urls = []

for url in content:
  page = visit(url)
  soup = BeautifulSoup(page)
  for tag in soup.findAll('iframe', src=True):
    link = tag['src']
    if is_comment_url(link):
      print(link)
      list_of_urls += link
pprint(list_of_urls)

Но проблема в том, что он работает только для одной итерации и застревает.

Также есть ли способ сохранить веб-страницу в том виде, в котором она отображается в браузере (после выполнения всего JavaScript и т. Д.)

0 ответов

Другие вопросы по тегам