我想用漂亮的汤来提取此网站上的表格的积分列中的值:link。但是该表每页仅显示30个播放器,之后您必须单击底部的箭头以查看下一批播放器。这似乎并没有改变在漂亮汤中输入的实际URL。使用检查元素后,很明显,虽然显示第1页,但该站点不包含有关第2、3页等的任何信息。
那么当它们似乎都具有相同的url但又不都包含所有页面的信息时,如何从所有页面中提取信息呢?
答案 0 :(得分:1)
这看起来像一个单击事件,您无法使用BS直接从HTML代码中删除某些事件。但是,可以用硒刮擦。
答案 1 :(得分:1)
您可以使用ViewModifier
继续单击“转发”按钮,直到将其禁用:
selenium
输出(前四页):
from selenium import webdriver
from bs4 import BeautifulSoup as soup
d = webdriver.Chrome('/Users/jamespetullo/Downloads/chromedriver')
d.get('https://fantasy.premierleague.com/statistics')
results = []
def player(p):
return {'img':p.img['src'], 'name':p.find('div', {'class':'ElementInTable__Name-y9xi40-1 bsSrWV'}).text, **dict(zip(['team', 'pos'], [i.text for i in p.find_all('span')]))}
def page_data(page):
t = page.find('table', {'class':'Table-ziussd-1 ElementTable-sc-1v08od9-0 jXIUKt'})
h, _d = [i.text for i in t.find('tr').find_all('th')][1:], [(lambda x:[player(x[0]), *[k.text for k in x[1:]]])(i.find_all('td')[1:]) for i in t.find_all('tr')[1:]]
return [dict(zip(h, i)) for i in _d]
flag = False
while len((x:=soup(d.page_source, 'html.parser')).find_all('button', {'class':'PaginatorButton__Button-xqlaki-0 lgWpws'})) == 2 or not flag:
results.append(page_data(x))
b = [i for i in d.find_elements_by_tag_name('button') if i.get_attribute('class') == 'PaginatorButton__Button-xqlaki-0 lgWpws']
b[-1].send_keys('\n')
flag = True
results.append(page_data(x))