【问题标题】:Scraping certain URL from specific page从特定页面抓取特定 URL
【发布时间】:2020-08-12 10:54:31
【问题描述】:

我正在尝试从页面中抓取所有与一个主题相关的 URL。

我正在用漂亮的汤来做这个。

我目前的尝试是

urls = soup.find_all('a', href=True)

但是页面上有很多额外的 URL,我不想抓取。

页面是: https://www.basketball-reference.com/players/

我想抓取所有玩家的名字以及他们的参考代码,例如

 <a href="/players/a/allenra02.html">Ray Allen</a>,

会将 'Ray Allen/allenra02 添加到列表中。

如何使用漂亮的汤在 url 搜索中添加所需的前缀?例如“玩家/”

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    试试这个,

    import requests
    
    url = 'https://www.basketball-reference.com/players/'
    soup = BeautifulSoup(requests.get(url).text, "html.parser")
    
    ul = soup.find("ul", attrs={'class':"page_index"})
    
    for li in ul.findAll("li"):
        # ignore the first value (index A,B...)
        for player in li.select("a")[1:]:
            print(
                player.text + "/" + player['href'].split("/")[-1].replace(".html", "")
            )
    

    Kareem Abdul-Jabbar/abdulka01
    Ray Allen/allenra02
    LaMarcus Aldridge/aldrila01
    ...
    ...
    

    【讨论】:

      【解决方案2】:

      您可以在.find_all() 中使用已编译的正则表达式作为href= 参数。

      例如:

      import re
      import requests
      from bs4 import BeautifulSoup
      
      
      url = 'https://www.basketball-reference.com/players/'
      soup = BeautifulSoup(requests.get(url).content, 'html.parser')
      
      r = re.compile(r'/players/.+/(.*?)\.html')
      out = []
      for a in soup.find('ul', class_="page_index").find_all('a', href=r):
          out.append('{}/{}'.format(a.get_text(strip=True), r.search(a['href']).group(1)))
      
      from pprint import pprint
      pprint(out)
      

      打印:

      ['Kareem Abdul-Jabbar/abdulka01',
       'Ray Allen/allenra02',
       'LaMarcus Aldridge/aldrila01',
       'Paul Arizin/arizipa01',
       'Carmelo Anthony/anthoca01',
       'Tiny Archibald/architi01',
       'Charles Barkley/barklch01',
       'Kobe Bryant/bryanko01',
       'Larry Bird/birdla01',
       'Walt Bellamy/bellawa01',
       'Rick Barry/barryri01',
       'Chauncey Billups/billuch01',
       'Wilt Chamberlain/chambwi01',
       'Vince Carter/cartevi01',
       'Maurice Cheeks/cheekma01',
       'Stephen Curry/curryst01',
      
      ...and so on.
      

      【讨论】:

        猜你喜欢
        • 2017-09-04
        • 2018-05-08
        • 1970-01-01
        • 1970-01-01
        • 2017-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-31
        相关资源
        最近更新 更多