尝试使用美丽的汤从网站显示文本

时间:2016-06-09 23:05:33

标签: python web-scraping beautifulsoup

我正在尝试从列表中的每个团队获得团队成员的数量,现在我获得所有团队链接,但不是获取所有链接我想要获得至少有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)

1 个答案:

答案 0 :(得分:1)

在团队链接后找到树中更远的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)而不是整数值,则会失败。根据您是否要计算待处理的团队成员,可能会有不同的逻辑处理。

例如,如果您不想计算待处理的团队成员,我们可以按空格分割并获取第一项,忽略内部&#34;待定&#34;:

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])
    # ...