我已经在该网站上进行了一段时间的挖掘,但无法找到解决我问题的方法。我对网页抓取非常陌生,它尝试使用漂亮的汤简单地从网页中提取一些链接。
url = "https://www.sofascore.com/pt/futebol/2018-09-18"
page = urlopen(url).read()
soup = BeautifulSoup(page, "lxml")
print(soup)
在最基本的级别上,我要做的就是访问网站中的特定标签。我可以自己解决其余的问题,但困扰的部分是我要查找的标签不在输出中。
例如:使用内置的find(),我可以获取以下div类标记: class =“ l__grid js-page-layout”
但是,我真正要寻找的是嵌入在树中较低级别的标签的内容。
js-event-list-锦标赛事件
当我在较低级别的标签上执行相同的查找操作时,没有任何结果。
我使用基于Azure的Jupyter Notebook,尝试了多种解决方案,以解决stackoverflow上的类似问题,并且没有运气。
谢谢! 肯尼
答案 0 :(得分:2)
该页面使用JS来动态加载数据,因此您必须使用硒。检查以下代码。 请注意,您必须安装selenium和chromedrive(将文件解压缩并复制到python文件夹中)
import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
url = "https://www.sofascore.com/pt/futebol/2018-09-18"
options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)
time.sleep(3)
page = driver.page_source
driver.quit()
soup = BeautifulSoup(page, 'html.parser')
container = soup.find_all('div', attrs={
'class':'js-event-list-tournament-events'})
print(container)
或者您可以使用他们的json API
import requests
url = 'https://www.sofascore.com/football//2018-09-18/json'
r = requests.get(url)
print(r.json())
答案 1 :(得分:1)
我遇到了同样的问题,以下代码对我有用。必须安装 Chromedriver!
import time
from bs4 import BeautifulSoup
from selenium import webdriver
chromedriver_path= "/Users/.../chromedriver"
driver = webdriver.Chrome(chromedriver_path)
url = "https://yourURL.com"
driver.get(url)
time.sleep(3) #if you want to wait 3 seconds for the page to load
page_source = driver.page_source
soup = bs4.BeautifulSoup(page_source, 'lxml')
这个 soup
你可以照常使用。