如何使用python中的beautifulsoup访问标签内的子标签?

时间:2017-05-01 22:15:27

标签: python beautifulsoup

我正试图从2016年赛季的MLB.com中获取球员统计数据。我在Python中使用Beautiful Soup,我需要在这里看到的表中提取信息:

http://mlb.mlb.com/stats/sortable.jsp#elem=%5Bobject+Object%5D&tab_level=child&click_text=Sortable+Player+hitting&game_type='R'&season=2016&season_type=ANY&league_code='MLB'&sectionType=sp&statType=hitting&page=1&ts=1493672037085&playerType=ALL&sportCode='mlb'&split=&team_id=&active_sw=&position=&page_type=SortablePlayer&sortOrder='desc'&sortColumn=ab&results=&perPage=442&timeframe=&last_x_days=&extended=0

以下是我的尝试:

r=requests.get(url)
soup=BeautifulSoup(r.content,'html.parser')
gdata=soup.find_all('div',{'id':'datagrid'})
print(gdata)

这应该返回标记中的所有子标记,但它不会。这导致以下结果:

[<div id="datagrid"></div>]

任何人都可以解释为什么这不会产生表的内容?此外,我该怎么做才能访问表的内容?

由于

1 个答案:

答案 0 :(得分:0)

如果您查看网页的来源,看起来datagrid div实际上是空的&amp;统计信息以this URL的json动态插入。也许你可以使用它。为了解决这个问题,我查看了页面来源,看到div没有孩子,然后使用Chrome开发人员工具网络标签查找提取数据的请求:

  1. 打开网页
  2. 打开chrome开发人员工具,Command + Option + I(Mac)或Control + Shift + I(Windows,Linux)。
  3. 在打开工具的情况下刷新网页,以便处理网络请求,然后等待页面加载
  4. (可选)在网络搜索栏中输入xml,将搜索结果范围缩小到可能包含数据的请求
  5. 点击每个请求,然后查看回复的预览。此时我只是手动检查了响应,看看哪个有你的数据。我很幸运,第一次尝试就得到你的,因为它有名字的统计数据。