【问题标题】:How can I scrape all of the batters names?我怎样才能刮掉所有击球手的名字?
【发布时间】:2019-01-18 10:15:20
【问题描述】:
from bs4 import BeautifulSoup
import requests  

url = 'http://www.baseballpress.com/lineups'  

soup = BeautifulSoup(requests.get(url).text, 'html.parser')  

print(soup.find('div', {'class': 'players'}).a.text)  

此代码仅返回列表中的第一个击球手。我如何得到他们所有的名字?我是编码新手,因此将不胜感激。在此先感谢您的时间! =)

当我尝试时:
print(soup.find_All('div', {'class': 'players'}).a.text)

我收到了这个:
TypeError: 'NoneType' 对象不可调用

当我尝试时:
print(soup.findAll('div', {'class': 'players'}).a.text)

我收到了这个:
AttributeError:ResultSet 对象没有属性“a”。您可能将项目列表视为单个项目。当你打算调用 find() 时,你调用了 find_all() 吗?

【问题讨论】:

标签: python web-scraping beautifulsoup python-requests


【解决方案1】:

尝试以下方法从该网页获取所有玩家名称。这里的技巧是使用连接到所有玩家的正确类名,在本例中为player-link

from bs4 import BeautifulSoup
import requests  

url = 'http://www.baseballpress.com/lineups'  

soup = BeautifulSoup(requests.get(url).text, 'html.parser')  

for names in soup.find_all(class_='player-link'):
    print(names.text)

【讨论】:

    【解决方案2】:

    分解“查找”语句:

    print(soup.find('div', {'class': 'players'}).a.text)  
    

    soup.find --> 返回参数的第一个实例

    参数 1 --> 'div' --> 寻找 'div' 标签

    argument 2 --> 键为 'class' 和值 'players' 的字典 --> 查找第一个 div 标签 class='players'

    然后调用 "a.text" --> 在锚标签中查找文本。

    只需将“find”替换为“findAll”将破坏“a.text”,因为现在不是单个标签,而是在列表上调用“a.text”。最好将操作分为两个步骤:

    batters_div = soup.findAll('div',{"class":"players"})
    for batter in batters_div:
      print(batter.a.text)
    

    使用列表理解:

    batters = [batter.a.text for batter in soup.findAll('div',{"class":"players"})]
    

    【讨论】:

    • ... 您编写的第二行代码(以“batters_div”开头)打印​​出每支球队的第一个击球手。我对他们所有人都抱有希望。我不知道在哪里输入你提到的第三行代码。谢谢你的帮助。我是新手,有很多东西要学。 =)
    • 明白了。我没有查看实际页面及其 DOM ...我只是指出了一种在 findAll 的结果上成功调用“a.text”的方法 - 这就是你的问题似乎是关于的。
    • 另外,第三行代码是实现前两行的替代方法。
    • 感谢您的帮助!再次感谢@PushkarChintaluri
    【解决方案3】:

    “find”方法只返回第一个匹配项。 请尝试“findAll”。

    the documentation here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-30
      • 2010-11-21
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 2020-04-06
      相关资源
      最近更新 更多