使用python beautifulsoup从网页抓取备用版本/隐藏项目

时间:2016-02-05 13:58:18

标签: python web-scraping beautifulsoup

我正试图从网站上搜索关于top14橄榄球运动员的信息(得分,铲球,时间,位置等等)。 对于每个玩家,我从此页面获取信息: http://www.lnr.fr/rugby-top-14/joueurs/nicholas-abendanon 对于每个球员,我可以轻松获得2015-2016赛季的信息,但我也需要2014-2015赛季的信息。

问题是,当我打开相应的链接(http://www.lnr.fr/rugby-top-14/joueurs/nicholas-abendanon#season=14535)时,源代码是相同的,而我的程序废弃的信息是2015-2016数据。 即使它出现在网页上,我似乎无法找到获取前几季信息的方法。 谁知道如何解决这个问题?

以下是我给出的播放器代码示例。

import bs4
from lxml import html
import requests
import string
import _pickle as pickle
from bs4 import BeautifulSoup

dic={}
url_player='http://www.lnr.fr/rugby-top-14/joueurs/nicholas-abendanon'
page = requests.get(url_player)
html=page.content
parsed_html = BeautifulSoup(html)
body=parsed_html.body
saison14_15=body.find('a',attrs={'data-title':'Saison 2014-2015'})
link=saison14_15['href']
url_season='http://www.lnr.fr/rugby-top-14/joueurs/nicholas-abendanon'+link
page_season = requests.get(url_season)
html_season=page_season.content
parsed_html_season = BeautifulSoup(html_season)
body_season=parsed_html_season.body

dic['nom']=body_season.find('h1',attrs={'id':'page-title'}).text
dic[body_season.find('span',attrs=     {'class':'title'}).text]=body_season.find('span',attrs={'class':'text'}).text
info1=body_season.find('ul',attrs={'class':'infos-list small-bold'})
try:
    for item in info1.findAll('li'):
        dic[item.find('span',attrs={'class':'title'}).text]=item.find('span',attrs={'class':'text'}).text 
    info2=body_season.find('ul',attrs={'class':'fluid-block-grid-3 team-stats'})
    if info2 is not None :
        for item in info2.findAll('li'):   
            dic[item.find('span',attrs={'class':'title'}).text]=item.find('span',attrs={'class':'text'}).text
    info3=body_season.find('ul',attrs={'class':'number-list small-block-grid-2'})
    if info3 is not None :
        for item in info3.findAll('li'):   
            dic[item.find('span',attrs={'class':'title'}).text]=item.find('span',attrs={'class':'text'}).text
except:
    dic=dic`

1 个答案:

答案 0 :(得分:0)

当您选择2014-2015季节时,该页面会向

发出AJAX请求
http://www.lnr.fr/ajax_player_stats_detail?player=33249&compet_type=1&=undefined&season=14535&_filter_current_tab_id=panel-filter-season&ajax-target-selector=%23player_stats_detail_block

如果您切换回2015-2016,它会向

发出AJAX请求
http://www.lnr.fr/ajax_player_stats_detail?player=33249&compet_type=1&=undefined&season=18505&_filter_current_tab_id=panel-filter-season&ajax-target-selector=%23player_stats_detail_block

每个请求都会返回一个插入页面的HTML块。

如果你能找出playerseason所需的参数,我建议你直接请求数据(根本不加载父页面)。