首页 > 解决方案 > 网络抓取 - 该网站向我的抓取工具显示不同的内容

问题描述

我为我的大学开发了一个项目,该项目从我的团队中获取数据并进行一些统计操作和其他工作。我得到数据的网站是这样的:http ://www.acb.com/club/estadisticas/id/13

我想获取不同季节的数据,但是当我运行代码时,我得到的内容与网站不同,例如,对于 2014 年的统计数据:

import requests
from bs4 import BeautifulSoup

def scrap_web(page):
    pageTree = requests.get(page)
    pageSoup = BeautifulSoup(pageTree.content, 'html.parser')
    TeamPage = pageSoup.find('div',{"class":'estadisticas_plantilla'}).find('tr',{"class": 'totales'})
    ValuesList = TeamPage.text.split('\n')[2:-1]

    arr = list(ValuesList)
    return arr


urltest = "http://www.acb.com/club/estadisticas/id/13/temporada_id/2014"

print(scrap_web(urltest))

我收到的数据来自本赛季,而不是 2014 赛季。问题可能是内容是通过 javascript 注入到页面中的?

标签: pythonweb-scrapingbeautifulsoup

解决方案


这与你的代码有些不同,但它可以让你足够接近你需要的东西,你可以从那里得到它:

url = "http://www.acb.com/club/estadisticas/id/13/temporada_id/2014"
import requests
import pandas as pd
from bs4 import BeautifulSoup as bs

resp = requests.get(url)

soup = bs(resp.text,'lxml')
table = soup.find_all('table')[0]
lower = table.select_one('tr.cabecera_general').findNextSibling()
table_rows = table.find_all('tr')
columns = []
rows = []

for c in lower.find_all('th'):
    columns.append(c.text)
for tr in table_rows:
    td = tr.find_all('td')
    row = [tr.text for tr in td]
    rows.append(row)

games = pd.DataFrame(rows,columns=columns)
games

推荐阅读