我正在尝试遍历多个页面以使用Python和Beautifulsoup来抓取数据。我的脚本适用于一个页面,但是当尝试迭代多个页面时,它只返回最后一页抓取的数据。我认为循环或存储/追加GL_REPOSITORY
列表的方式可能有问题。
这是我到目前为止所得到的 - 非常感谢任何帮助。
player_data
答案 0 :(得分:1)
这是缩进问题或声明问题,具体取决于您期望的结果。
您可以在打印前添加4个空格(player_data)来解决此问题。
如果让print语句在for循环块之外,它将在循环结束后只执行一次。因此,它可以显示的唯一值是从{for循环的最后一次迭代中泄漏的player_data
的最后一个值。
player_data
中并在最后打印:您必须在for循环之前和之前声明player_data
。
player_data = []
for n in pages:
# [...]
答案 1 :(得分:1)
您应该在循环外部使用player_data
列表定义,否则只会存储最后一次迭代的结果。
答案 2 :(得分:0)
import requests
from bs4 import BeautifulSoup
# Starting url (class of 2007)
base_url = 'http://www.espn.com/college-sports/basketball/recruiting/databaseresults/_/class/2007/page/'
# Number of pages to scrape (Not inclusive, so number + 1)
pages = list(map(str,range(1,3)))
# In Python 3, map returns an iterable object of type map, and not a subscriptible list, which would allow you to write map[i]. To force a list result, write
# url for starting page
url = base_url + pages[0]
for n in pages:
# Create url
url = base_url + n
# Parse data using BS
print('Downloading page %s...' % url)
res = requests.get(url)
res.raise_for_status()
# Creating bs object
soup = BeautifulSoup(res.text, "html.parser")
table = soup.find('table')
# Get the data
data_rows = soup.findAll('tr')[1:]
player_data = []
for tr in data_rows:
tdata = []
for td in tr:
tdata.append(td.getText())
if td.div and td.div['class'][0] == 'school-logo':
tdata.append(td.div.a['href'])
player_data.append(tdata)
print(player_data)