使用BeautifulGroup查找具有相同CSS类的多个元素

2024-09-28 21:30:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用beauthoulsoup的find_all()来搜索具有标记“div”和类“wisbb_name”的元素。我正在抓取的HTML来自,http://www.foxsports.com/mlb/scores。我的最终目标是根据网站上显示的当天起跑的所有投手的名字。下面是投手名字的HTML

<div class="wisbb_name">M. Fiers</div>

所有投手的HTML代码都有相同的类,只是与之相关的文本不同。我已经使用下面的代码行获取find_all()的所有结果并获取与之相关的文本。在

for el in soup.find():
print(el.get_text()) 

这很好,问题是find_all()找不到我想要它找到的元素,不管我如何修改参数。根据beauthulsoupdocumentation,下面的代码行应该找到具有类“wisbb_name”和标记“div”的元素。在

^{pr2}$

在打印变量时,我只得到一个空列表。我不确定我是不是在python中采用了错误的方法,或者我需要进一步了解HTML是如何工作的。我有最新版本的beauthoulsoup,我使用的是python3.6.2。我当前的完整代码如下。在

import requests
from bs4 import BeautifulSoup
page = requests.get("url from top because I can't use 3 links")
soup = BeautifulSoup(page.content, "lxml")
for el in soup.find_all("div", class_="wisbb_name"):
    print(el.get_text())

Tags: 代码name标记div元素gethtmlall
1条回答
网友
1楼 · 发布于 2024-09-28 21:30:30

文本用JavaScript呈现。 首先用dryscrape呈现页面

import bs4 as bs
import dryscrape

url = ("http://www.foxsports.com/mlb/scores")
session = dryscrape.Session()
session.visit(url)
dsire_get = session.body()
soup = bs.BeautifulSoup(dsire_get,'lxml')
for el in soup.find_all("div", class_="wisbb_name"):
    print(el.get_text())

输出:

^{pr2}$

或者用硒。。。 首先安装:

sudo pip3 install selenium

然后找个司机https://sites.google.com/a/chromium.org/chromedriver/downloads

import bs4 as bs
from selenium import webdriver  
browser = webdriver.Chrome()
url = ("http://www.foxsports.com/mlb/scores")
browser.get(url)
html_source = browser.page_source
browser.quit()
soup = bs.BeautifulSoup(html_source, "lxml")
for el in soup.find_all("div", class_="wisbb_name"):
    print(el.get_text())

或PyQt5:

from PyQt5.QtGui import *  
from PyQt5.QtCore import *  
from PyQt5.QtWebKit import *  
from PyQt5.QtWebKitWidgets import QWebPage
from PyQt5.QtWidgets import QApplication
import bs4 as bs
import sys

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.foxsports.com/mlb/scores" 
r = Render(url)  
result = r.frame.toHtml()
soup = bs.BeautifulSoup(result,'lxml')
for el in soup.find_all("div", class_="wisbb_name"):
    print(el.get_text())

相关问题 更多 >