所以,我想从桌子上拿走足球统计数据,但首先,我想从桌子上拿汤。这是我遇到的问题,我总是得到一个空列表。
这是代码:
import requests
from bs4 import BeautifulSoup
url = 'https://www.eredmenyek.com/foci/nemetorszag/bundesliga/'
oldal = requests.get(url)
soup = BeautifulSoup(oldal.text, "lxml")
review_table_elem = soup.find_all('div', {'class': 'stats-table-container'})
print(review_table_elem)
HTML代码为:
此处有很多div
<div class="stats-table-container"><table id="table-type-1" class="stats-table stats-main table-1" title=""> //And here is the table
答案 0 :(得分:1)
硒的一种替代方法是requests-html。由于您已经熟悉了请求,因此您可以轻松地进行处理。
from bs4 import BeautifulSoup
from requests_html import HTMLSession
import requests
session = HTMLSession()
r = session.get('https://www.eredmenyek.com/foci/nemetorszag/bundesliga/')
r.html.render(sleep=5)
soup = BeautifulSoup(r.html.html, "html.parser")
review_table_elem = soup.find_all('div', {'class': 'stats-table-container'})
print(review_table_elem)
答案 1 :(得分:0)
您正在与之交互的页面在很大程度上取决于JavaScript来呈现其内容。您要查找的数据不会包含在requests
中,因为它不评估javascript。
要实现此目的,您将需要使用某些功能,例如Selenium WebDriver。这是使用它和Chrome无头实例的解决方案。除了安装selenium
模块之外,您还需要下载ChromeDriver并更改以下代码以将其指向您将其提取到的位置:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(
options=options, executable_path=r"C:\chromedriver\chromedriver.exe"
)
try:
driver.get("https://www.eredmenyek.com/foci/nemetorszag/bundesliga/")
soup = BeautifulSoup(driver.page_source, "html.parser")
for row in soup.select(".stats-table-container tr"):
print("\t".join([e.text for e in row.select("td")]))
finally:
driver.quit()
结果:
1. Borussia Dortmund 20 15 4 1 51:20 49 2. Mönchengladbach 20 13 3 4 41:18 42 3. Bayern München 20 13 3 4 44:23 42 4. RB Leipzig 20 11 4 5 38:18 37 5. Frankfurt 20 9 5 6 40:27 32 ...