【发布时间】:2021-06-07 19:01:51
【问题描述】:
我正在尝试将长表 (24 页) 的数据传输到 Pandas 数据框,但遇到 (我认为) 的一些问题 -循环代码。
import requests
from bs4 import BeautifulSoup
import pandas as pd
base_url = 'https://scrapethissite.com/pages/forms/?page_num={}'
res = requests.get(base_url.format('1'))
soup = BeautifulSoup(res.text, 'lxml')
table = soup.select('table.table')[0]
columns = table.find('tr').find_all('th')
columns_names = [str(c.get_text()).strip() for c in columns]
table_rows = table.find_all('tr', class_='team')
l = []
for n in range(1, 25):
scrape_url = base_url.format(n)
res = requests.get(scrape_url)
soup = BeautifulSoup(res.text, 'lxml')
for tr in table_rows:
td = tr.find_all('td')
row = [str(tr.get_text()).strip() for tr in td]
l.append(row)
df = pd.DataFrame(l, columns=columns_names)
Dataframe 仅作为第一页的重复出现,而不是表中所有数据的副本。
【问题讨论】:
-
table_rows设置在 for 循环之外,因此不会在循环内更改。这是你的问题吗? -
它自己不起作用,但@Corralien 的解决方案起作用了。谢谢。
-
仅供参考 pandas
read_html允许直接从 url 加载 html 表格。 -
@RJAdriaansen 我一定会尝试一下,但我尝试这段代码的目的是练习网页抓取作为一个概念,我只是添加了 Pandas 部分以使其更难。谢谢。
标签: python pandas beautifulsoup