【问题标题】:Python segment fault, using pyqt4Python 段错误,使用 pyqt4
【发布时间】:2015-11-13 12:12:31
【问题描述】:

我写了一段代码来抓取一个网页,该网页实际上可以通过一个 url 使用它,但是一旦我在 .txt 中输入超过 2 个 url,就会告诉我“分段错误”。我不知道问题出在哪里。任何帮助将不胜感激。

import sys
import time
import gc
from bs4 import BeautifulSoup
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4.QtWebKit import * 


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.deleteLater()
        self.app.quit()

with open('/blah/blah/blah/blah/blah.txt') as f:
    urls = f.read().splitlines()

    for i in urls:
        r = Render(i)
        soup = BeautifulSoup(unicode(r.frame.toHtml()))
        summary = soup.find('div',{'style' : 'padding-top:10px;'})
        tables = summary.find('tbody')
        count = 0
        print 
        for row in tables.findAll('tr'):
            for cell in row.findAll('td'):
                data = cell.getText()
                if (count < 15):
                    data = data + ';'
                    print data, 
                count += 1
                if (count==16):
                    print data
                    count = 0       

嗯,这就是代码。在它告诉我分段错误之前,我得到了 2 次 with 循环迭代...... :( 换句话说,我可以从 txt 的 6 个 url 中抓取 2 个。

提前感谢您的帮助

【问题讨论】:

  • 确切的错误是什么。
  • 在 .txt 文件中有 6 个我想抓取的 url。运行代码时,它需要第一个,给我输出。拿第二个,给我输出,然后说'Segmentation Fault'。不明白为什么...
  • Segmentation Fault 究竟是如何呈现的?
  • 如果你只做第三个 URL 你会犯错吗?
  • Url 是这样的:simplesoccerstats.com/stats/…我在 python 2.7 上,在 Kali Linux 上。

标签: python segmentation-fault beautifulsoup qt4 scrape


【解决方案1】:

我设法重现了这个问题。以下代码导致 Python 失败(在 Windows 上)。不需要所有的文件读取和 BeautifulSoup 代码:

for _ in range(3):
    r = Render('google.com')

如果我确保在创建第二个之前删除了第一个 Render 对象,那么就没有错误:

for _ in range(3):
    r = Render('google.com')
    del r

我发现this related question 表示您不能在一个进程中拥有多个 PyQt 应用程序。我对 PyQt 不熟悉,所以不知道你会如何解决这个问题。这可能很简单,但您必须稍微搜索一下。

另外,this question has code almost identical to yoursa very good answer 展示了如何创建单个 QApplication 并获取多个 URL。您的问题可能应该作为重复项关闭。

【讨论】:

  • 非常感谢您的时间和精力,但按照您所说的操作后仍然给我分段错误。我以前读过那篇文章,但这对我没有帮助,这就是我打开另一篇文章的原因。不知道该怎么办了..
  • 没看到你之前编辑过。下班后去看看!谢谢!
  • @Enaggi 抱歉,我刚刚尝试了代码,但它不起作用。尝试链接中的代码。我没有时间修复它,所以将其删除以避免混淆其他人。
  • 是的,我确实意识到了这一点。不用担心,感谢您的帮助。将再次检查链接,看看如何修改它以在我的中使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
相关资源
最近更新 更多