我如何抓取所有击球手的名字?

时间:2018-08-10 18:56:01

标签: python web-scraping beautifulsoup python-requests

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()?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

打破“ find”声明:

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

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

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

参数2->具有键“ class”和值“ players”的字典->查找具有class =“ players”的第一个div标签

然后调用“ a.text”->在锚标记中查找文本。

仅用“ findAll”替换“ find”将破坏“ 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"})]

答案 2 :(得分:0)

“ find”方法仅返回第一个匹配项。 尝试使用“ findAll”。

请参见the documentation here