小编ekh*_*oro的帖子

如何使用BeautifulSoup和Python从<div>标签中的<a href>标签获取信息?

所有.我有一个关于BeautifulSoup with Python的快速问题.我有几个HTML看起来像这样(唯一的区别是链接和产品名称),我试图从"href"属性获取链接.

<div id="productListing1" xmlns:dew="urn:Microsoft.Search.Response.Document">
<span id="rank" style="display:none;">94.36</span>
<div class="productPhoto">
    <img src="/assets/images/ocpimages/87684/00131cl.gif" height="82" width="82" />
</div>
<div class="productName">
    <a class="on" href="/Products/ProductInfoDisplay.aspx?SiteId=1&amp;Product=8768400131">CAPRI SUN - JUICE DRINK - COOLERS VARIETY PACK 6 OZ</a>
</div>
<div class="size">40 CT</div>
Run Code Online (Sandbox Code Playgroud)

我目前有这个Python代码:

productLinks = soup.findAll('a', attrs={'class' : 'on'})
for link in productLinks:
    print link['href']
Run Code Online (Sandbox Code Playgroud)

这是有效的(对于页面上的每个链接我得到的东西/Products/ProductInfoDisplay.aspx?SiteId=1&amp;Product=8768400131); 但是,我一直试图弄清楚是否有办法在"href"属性中获取链接而不在"'上明确搜索'class =".我想我的第一个问题应该是这是否是找到这些信息的最佳方式(class ="on"看起来过于通用,并且可能在将来中断,尽管我的CSS和HTML技能不是那么好).我已经尝试了find,findAll,findAllnext等方法的多种组合,但我无法使其工作.这主要是我所拥有的(我重新排列并多次更改):

productLinks = soup.find('div', attrs={'class' : 'productName'}).find('a', href=True)
Run Code Online (Sandbox Code Playgroud)

如果这不是一个好方法,我怎样才能<a><div class="productName">标签中获取标签?如果您需要更多信息,请与我们联系.

谢谢.

python beautifulsoup

9
推荐指数
2
解决办法
3万
查看次数

PyQt:我如何为各个标题设置不同的标题大小?

我有一个包含两个项目列表的列表,一个单词和一个数字.这个列表将使用tablewidget呈现.

我的目标是生成一个包含两列并且具有必要行的表,但是具有单词的列的标题应该大于数字列.

我可以使用resize列来调整内容,但是我希望在调整大小后桌子周围没有白色的空白空间.

为了创建gui代码,我正在使用QtDesigner.Thanks.

python resize pyqt qtablewidget qheaderview

9
推荐指数
2
解决办法
1万
查看次数

将python函数直接应用于Qt设计器作为信号

我是Qt和GUI编程的新手,但我已经在python中编写了相当多的代码 - 编写模块等等.我需要为我的一些旧模块开发简单的GUI.

我想做的事情可以通过以下简单的例子来表示:

def f(x, y):
    z = x + y
    return z
Run Code Online (Sandbox Code Playgroud)

对于此功能,我将为x和y提供两个行编辑,为z提供一个.现在我创建一个按钮'计算',当我这样做时,我希望它从行编辑中获取x和y运行函数f(x,y)并将输出提供给z.

有没有办法直接在Qt Designer中添加f(x,y)用python编写的函数?

如果不是什么选择?

python pyqt signals-slots pyqt4 qt-designer

9
推荐指数
1
解决办法
5652
查看次数

QSettings():如何保存到当前工作目录

对于可以直接从闪存/笔/ USB /跳/拇指驱动器运行的应用程序,为了便于从一台机器移动到另一台机器,将用户设置存储在记忆棒上的同一目录中是有意义的.程序正在运行(而不是每台机器的Windows/Mac/Linux用户或系统目录).

QSettings()很方便,可以告诉它使用当前的工作目录吗?

这是一个小例子程序,它使用QSettings()保持其运行的屏幕位置:

from PySide import QtGui, QtCore
from PySide.QtGui import QTabWidget, QApplication
from PySide.QtCore import QSettings

class AbcApp(QTabWidget):
    def __init__(self):
        super(AbcApp, self).__init__()

        self.settings = QSettings(QSettings.IniFormat,QSettings.SystemScope, '__MyBiz', '__settings')
        self.settings.setFallbacksEnabled(False)    # File only, not registry or or.

        # setPath() to try to save to current working directory
        self.settings.setPath(QSettings.IniFormat,QSettings.SystemScope, './__settings.ini')

        # Initial window size/pos last saved
        self.resize(self.settings.value("size", QtCore.QSize(270, 225)))
        self.move(self.settings.value("pos", QtCore.QPoint(50, 50)))

        self.tab = QtGui.QWidget()
        self.textEdit = QtGui.QTextEdit(self.tab)
        self.textEdit.setHtml('<font color=grey>[QTextEdit area]</font><p><center><font color=blue size=4><b>Allo Woyld</b></font></center>')
        self.addTab(self.tab, 'tab1')

    def closeEvent(self, e):
        # …
Run Code Online (Sandbox Code Playgroud)

python pyqt4 pyside

8
推荐指数
1
解决办法
1万
查看次数

如何实现Qt Designer中定义的信号/槽

我试图将按钮的click()信号连接到我自己的函数.该按钮位于我使用QT Designer创建的小部件中.我用QUiLoader加载.ui文件,如下所示:

class MyWidget(QtGui.QMainWindow):
    def __init__(self, *args):  
        QtGui.QMainWindow.__init__(self, *args)

        loader = QtUiTools.QUiLoader()
        file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui")
        file.open(QtCore.QFile.ReadOnly)
        self.myWidget = loader.load(file, self)
        file.close()

        self.setCentralWidget(self.myWidget)

        btn = self.myWidget.findChild(QtGui.QPushButton, "HelloWorldButton")
        btn.clicked.connect(self.slot1)        

    def slot1(self):
        print "Received"
Run Code Online (Sandbox Code Playgroud)

这是连接按钮clicked()信号的正确方法吗?我看到我可以直接在Qt Designer中连接信号和插槽,但是我如何准备并在代码中进行这样的连接?附带问题:上面的代码有效,但主窗口显示错误的大小.如何确保尺寸合适?我应该用最小的高度/宽度限制来做到这一点吗?

python pyqt signals-slots qt-designer pyside

8
推荐指数
1
解决办法
8470
查看次数

PyQt - 如果UI已经运行,如何检测和关闭它?

我从Maya内部启动UI.如果UI尚未关闭,再次运行UI将完全冻结Maya(错误"事件循环已在运行")

在重新运行脚本之前手动关闭UI将阻止它冻结.但我想这不太实际.

有没有办法检测我正在尝试运行的UI是否已经存在?可能的力量关闭它?

python pyqt single-instance pyqt4

8
推荐指数
2
解决办法
5107
查看次数

自定义绘制委托中的可单击元素或子窗口小部件

我有一个QListView,我使用自定义绘图显示项目.在每个项目(即每个列表行)中,我希望能够显示一些用户可以单击的"超链接",然后调用某些功能.

我已经尝试检查官方文档(例如模型/视图编程)以及相当多的谷歌搜索,但还没有弄清楚如何实现这一目标.

我有两个想法,每个都有自己的问题:

  • 我可以使用子小部件绘制它们,就像平面QPushButton一样.然后我如何定位和显示这些小部件?
  • 我也可以将它们绘制为文本字符串.然后如何使它们可点击?或者我可以捕获父QListView上的点击事件,并以某种方式确定那些坐标?然后我可以将坐标与这些可点击元素进行匹配并相应地采取行动

我最初的方法是使用QListWidget和.setItemWidget(),其中我有一个带有布局和子窗口小部件的正确小部件.不幸的是,当我的列表增加到数百或数千个项目时,这太慢了.这就是我用委托更改为QListView的原因.

qt qt4 qlistview qitemdelegate pyside

8
推荐指数
1
解决办法
1414
查看次数

PyQt - 如何使getOpenFileName记住最后的开放路径?

根据getOpenFileName说明:

QString fileName = QFileDialog.getOpenFileName(this, tr("Open File"), 
                                          "/home",
                                          tr("Images (*.png *.xpm *.jpg)"));
Run Code Online (Sandbox Code Playgroud)

当我关闭它时,如何让对话框记住最后一次的路径?

什么是tr意味着tr("Open File")什么?

谢谢

python pyqt qfiledialog

8
推荐指数
1
解决办法
2万
查看次数

PyQt连接到KeyPressEvent

某些小部件允许我这样做:

self.widget.clicked.connect(on_click)
Run Code Online (Sandbox Code Playgroud)

但做:

self.widget.keyPressEvent.connect(on_key)
Run Code Online (Sandbox Code Playgroud)

将失败说该对象没有属性'connect'.

我知道对窗口小部件进行子类化并重新实现该keyPressEvent方法将允许我响应该事件.但是,如何.connect()从用户上下文中获取键盘事件或以其他方式说出来?

python events signals-slots pyqt4

8
推荐指数
2
解决办法
2万
查看次数

使用 QWebEngineView 与 html/javascript 通信

我需要获取动态内容,该内容由 ajax js 调用加载。

我真的不知道如何使用 PyQt,但我希望我能做到这一点。HTML是这样的:

<a href="#" id="id" onclick="A4J.AJAX.Submit('j_id0:j_id1:j_id110',event,{'similarityGroupingId':'j_id0:j_id1:j_id110:j_id582:0:j_id584'});return false;">NETHERLANDS</a>`
Run Code Online (Sandbox Code Playgroud)

我可以使用以下简单代码使用 PyQt 呈现页面:

def render(source_html):

    import sys
    from PyQt5.QtCore import QEventLoop
    from PyQt5.QtWidgets import QApplication
    from PyQt5.QtWebEngineWidgets import QWebEngineView

    class Render(QWebEngineView):
        def __init__(self, html):
            self.html = None
            self.app = QApplication(sys.argv)
            QWebEngineView.__init__(self)
            self.loadFinished.connect(self._loadFinished)
            self.setHtml(html)

            while self.html is None:
                self.app.processEvents(QEventLoop.ExcludeUserInputEvents | QEventLoop.ExcludeSocketNotifiers | QEventLoop.WaitForMoreEvents)
            self.app.quit()

        def _callable(self, data):
            self.html = data

        def _loadFinished(self, result):
            self.page().toHtml(self._callable)

    return Render(source_html).html

import requests
sample_html = requests.get('https://riverbankcomputing.com/software/pyqt/').text
print(render(sample_html))
Run Code Online (Sandbox Code Playgroud)

我如何运行“onclick”并获取内容?

html javascript pyqt pyqt5 qwebengineview

8
推荐指数
1
解决办法
2561
查看次数