如何找到重复的JS元素BeautifulSoup Python

时间:2018-06-04 15:08:06

标签: javascript python selenium web-scraping beautifulsoup

html =

<span class="title">
    <a href="VIDEO HREF" title="title" class="js-pop">title text</a>"
</span>

代码=

class Client(QWebPage):

    def __init__(self, url):
        self.app = QApplication(sys.argv)
        QWebPage.__init__(self)
        self.loadFinished.connect(self.on_page_load)
        self.mainFrame().load(QUrl(url))
        self.app.exec_()
    def on_page_load(self):
        self.app.quit()

client_response = Client(url)
source = client_response.mainFrame().toHtml()
soup = bs.BeautifulSoup(source, 'lxml')
for link in soup.findAll('a', class_='js-pop'):
    href = link.get('href')
    print(href)
    print(link.text)

我希望它返回href链接和标题文本。

当我运行它时会打印每个包含文本“js-pop”的类,并且有多个名为“js-pop”的类不是我想要删除的类。

我尝试在selenium中抓取页面,当我尝试在class ='js-pop'

上找到href时,它会打印“none”

我试图抓取的元素都有唯一的ID,CSS选择器和xpaths

我该如何定位这个元素?

1 个答案:

答案 0 :(得分:1)

要显示hreftitle和范围文字,您可以执行以下操作:

import bs4 as bs

html = '<span class="title"><a href="VIDEO HREF" title="title" class="js-pop">title text</a></span>'
soup = bs.BeautifulSoup(html, 'lxml')

for link in soup.findAll('a', class_='js-pop', href=True, title=True):
    print(link['href'])
    print(link['title'])
    print(link.text)

这会显示:

VIDEO HREF
title
title text

通过添加href=Truetitle=True,它告诉find只返回实际包含这两个属性的元素。