我正在尝试获取列表中每个团队的团队成员数量,现在我获取了所有团队链接,但我想要获取至少有 5 个团队的团队的链接,而不是获取所有链接成员。我该怎么做呢?我尝试过,但到目前为止没有任何效果。
import time
import requests
from bs4 import BeautifulSoup
def get_all(url, base):
r = requests.get(url)
page = r.text
soup = BeautifulSoup(page, 'html.parser')
for team_links in soup.select('div.details h3 a'):
yield base + team_links['href']
next_page = soup.find('div', {'class': 'pages'}).find('span', text='Next')
while next_page:
# Gives the server a break
time.sleep(0.2)
r = requests.get(BASE_URL + next_page.find_previous('a')['href'])
page = r.text
soup = BeautifulSoup(page)
for team_links in soup.select('div.details h3 a'):
yield BASE_URL + team_links['href']
next_page = soup.find('div', {'class': 'pages'}).find('span', text='Next')
if __name__ == '__main__':
BASE_URL = 'http://www.gosugamers.net'
URL = 'http://www.gosugamers.net/counterstrike/teams'
for link in get_all(URL, BASE_URL):
print (link)
最佳答案
找到 Members:
标签,该标签位于树中团队链接后面的位置。然后,获取团队成员值,转换为整数并检查是否小于5:
for team_links in soup.select('div.details h3 a'):
members = int(team_links.find_next("th", text="Members:").find_next_sibling("td").text.strip())
if members < 5: # skip teams with less than 5 members
continue
yield base + team_links['href']
请注意,如果存在 1 (Pending: 1)
而不是整数值,则会失败。根据您是否想要计算待处理的团队成员,可能会有不同的逻辑处理。
例如,如果您不想计算待处理的团队成员,我们可以按空格分割并获取第一项,忽略“待处理”中的内容:
for team_links in soup.select('div.details h3 a'):
members = int(team_links.find_next("th", text="Members:").find_next_sibling("td").text.strip().split()[0])
# ...
关于python - 尝试使用 BeautifulSoup 显示网站上的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37737567/