【发布时间】:2020-07-27 18:19:02
【问题描述】:
我想抓取并从嵌套的 URL 链接中解析表格,并创建一个 pandas 数据框并将其导出。如果页面有一个表格,我想出了如何从 HTML 页面 scrape 表格,但现在我需要 scrape 并从母链接上的子链接解析表格,我想我需要遍历所有子链接以解析我感兴趣的表。我想知道是否有任何有效的方法可以使用BeautifulSoup 来做到这一点。谁能指出我如何做到这一点?
我的尝试
这是我目前从 HTML 页面抓取和解析单个表格的尝试,但我不知道如何从嵌套的 HTML 页面抓取和解析具有唯一表格名称的表格并创建最后是一个熊猫数据框。
def scrape_table(url):
response = requests.get(url, timeout=10)
bs= BeautifulSoup(response.content, 'html.parser')
table = bs.find('table')
list_of_rows = []
for row in table.findAll('tr'):
list_of_cells =[]
for cell in row.findAll('td'):
text = cell.text
list_of_cells.append(text)
list_of_rows.append(list_of_cells)
x= list_of_rows[1:]
df = pd.DataFrame(x, index=None)
df.to_csv("output.csv")
但这是我想做的:
main_entry_html = "http://www.bom.gov.au/climate/current/statement_archives.shtml"
child_url_1= "http://www.bom.gov.au/climate/current/month/aus/archive/202001.summary.shtml"
child_url_2 = "http://www.bom.gov.au/climate/current/month/aus/archive/202002.summary.shtml"
child_url_2 = "http://www.bom.gov.au/climate/current/month/aus/archive/202003.summary.shtml"
...
以此类推,我需要通过2015-01 to 2020-07访问所有月度汇总链接,scrape并解析标题为Area-average rainfall的表格,最后创建数据框作为我想要的输出。
我想我可以使用 for 循环来迭代每个子 URL 链接(又名月份摘要链接),然后通过查看表名来解析我想要的表。我不确定如何在 python 中实现这一点?谁能指出我如何做到这一点?有什么可能的想法吗?
想要的输出:
这是我想要在 scraping 并解析所有子 URL 链接中的所有表之后获得的所需数据帧。这是带有虚拟值的示例数据框:
有什么方法可以得到我想要的数据框吗?我如何抓取并从nested-url-link 解析表格?谁能给我关于如何实现预期输出的可能想法?谢谢
【问题讨论】:
标签: python pandas web-scraping beautifulsoup