首页 > 解决方案 > 如何使用 Beautiful Soup 抓取多页搜索结果

问题描述

使用以下网址:

https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=Celtics&BeginDate=&EndDate=&PlayerMovementChkBx=yes&Submit=Search

我正在尝试抓取此处显示的表格的结果。问题是,无论如何,搜索结果仅限于 25/页,正如您所看到的 - 多个页面上有数千个结果。

我试图更改开始和结束日期无济于事。

当我用美汤刮的时候,我只能刮到结果的第1页,然后就停止了。我缺少什么(在这种情况下),所有 85 页的结果?(并且 - 我的代码是成功的,但只从结果的第 1 页返回一个抓取)。

这是我的代码:

blah = []

html = 'https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=Celticss&PlayerMovementChkBx=yes&submit=Search&start=0'
webpage = requests.get(html)
content = webpage.content
soup = BeautifulSoup(content)

for item in soup.find_all('tr'):
    for value in item.find_all('td'):
        gm = value.text
        blah.append(gm)

标签: pythonweb-scrapingbeautifulsoup

解决方案


在整个代码段周围添加一个 do 循环,该循环会抓取其中一个表,并将 url 递增 25。在下面的代码段中,我刚刚创建了一个最初为零的计数器变量,每个循环递增 25。当对请求的响应不再有效时,代码将中断循环,这意味着您遇到错误或搜索结果结束。您可以修改该语句以中断 404 或打印错误等。

下面的代码未经测试,只是我的概念的演示。

blah = []

url = 'https://www.prosportstransactions.com/basketball/Search/SearchResults.php?Player=&Team=Celticss&PlayerMovementChkBx=yes&submit=Search&start='
  
counter = 0

while True: 
    url += str(counter)
    webpage = requests.get(url)

    if webpage.status_code != 200:
        break
        
    content = webpage.content
    soup = BeautifulSoup(content)
    
    for item in soup.find_all('tr'):
        for value in item.find_all('td'):
            gm = value.text
            blah.append(gm)
    
    counter += 25

推荐阅读