我正在练习网络报废,我决定查看我最常使用的网站Flash Score,然后很快就遇到了麻烦。
我的代码如下:
from bs4 import BeautifulSoup
import urllib2
soup = BeautifulSoup(urllib2.urlopen('http://www.flashscore.com/').read())
print soup.find("div", id = "fscon")
但是这会返回:
<div id="fscon">
<div class="preload pvisit" id="preload"><span>Loading ...</span></div>
</div>
当我看到包含所有信息的主表的网页时,而不是我在HTML中看到的内容。
答案 0 :(得分:2)
这个特定的页面并不是开始抓取网页的最简单的例子,因为它非常“动态”,它涉及额外的请求和javascript执行以完全加载页面。
最高级别的选项是使用真实的浏览器加载页面,等待完整加载并解析HTML。使用selenium
的工作示例:
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.maximize_window()
wait = WebDriverWait(driver, 10)
url = 'http://www.flashscore.com/'
driver.get(url)
# wait for the complete page load
wait.until(EC.invisibility_of_element_located((By.ID, "preload")))
# parse the HTML
soup = BeautifulSoup(driver.page_source, "html.parser")
print(soup.find("div", id = "fscon"))
driver.close()