使用 BeautifulSoup 从网页中提取内容
Extracting content from webpage using BeautifulSoup
我正在使用以下代码从 Powerball 网站上抓取号码。
但是,数字总是空着。这是为什么?
import requests
from bs4 import BeautifulSoup
url = 'https://www.powerball.com/games/home'
page = requests.get(url).text
bsPage = BeautifulSoup(page)
numbers = bsPage.find_all("div", class_="field_numbers")
numbers
如果您下载该文件并在本地检查它,您可以看到没有 <div>
和那个 class。这意味着它可能是由您的浏览器使用 javascript 动态生成的,因此您需要使用诸如 selenium 之类的东西来获取完整的生成的 HTML 内容。
无论如何,在这种特定情况下,HTML 的这一部分似乎是您要查找的数据的容器:
<div data-url="/api/v1/numbers/powerball/recent?_format=json" class="recent-winning-numbers"
data-numbers-powerball="Power Play" data-numbers="All Star Bonus">
现在,如果您检查自定义 data-url
,您可以找到您想要的 JSON 格式的信息。
可以确认@Teprr 是绝对正确的。你需要 download chrome and add chromedriver.exe 到你的系统路径才能工作,但下面的代码得到你正在寻找的东西。您也可以使用其他浏览器,您只需要它们各自的驱动程序即可。
from bs4 import BeautifulSoup
from selenium import webdriver
import time
url = 'https://www.powerball.com/games/home'
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(options=options)
browser.get(url)
time.sleep(3) # wait three seconds for all the js to happen
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
draws = soup.findAll("div", {"class":"number-card"})
print(draws)
for d in draws:
info = d.find("div",{"class":"field_draw_date"}).getText()
balls = d.find("div",{"class":"field_numbers"}).findAll("div",{"class":"numbers-ball"})
numbers = [ball.getText() for ball in balls]
print(info)
print(numbers)
我正在使用以下代码从 Powerball 网站上抓取号码。 但是,数字总是空着。这是为什么?
import requests
from bs4 import BeautifulSoup
url = 'https://www.powerball.com/games/home'
page = requests.get(url).text
bsPage = BeautifulSoup(page)
numbers = bsPage.find_all("div", class_="field_numbers")
numbers
如果您下载该文件并在本地检查它,您可以看到没有 <div>
和那个 class。这意味着它可能是由您的浏览器使用 javascript 动态生成的,因此您需要使用诸如 selenium 之类的东西来获取完整的生成的 HTML 内容。
无论如何,在这种特定情况下,HTML 的这一部分似乎是您要查找的数据的容器:
<div data-url="/api/v1/numbers/powerball/recent?_format=json" class="recent-winning-numbers"
data-numbers-powerball="Power Play" data-numbers="All Star Bonus">
现在,如果您检查自定义 data-url
,您可以找到您想要的 JSON 格式的信息。
可以确认@Teprr 是绝对正确的。你需要 download chrome and add chromedriver.exe 到你的系统路径才能工作,但下面的代码得到你正在寻找的东西。您也可以使用其他浏览器,您只需要它们各自的驱动程序即可。
from bs4 import BeautifulSoup
from selenium import webdriver
import time
url = 'https://www.powerball.com/games/home'
options = webdriver.ChromeOptions()
options.add_argument('headless')
browser = webdriver.Chrome(options=options)
browser.get(url)
time.sleep(3) # wait three seconds for all the js to happen
html = browser.page_source
soup = BeautifulSoup(html, 'html.parser')
draws = soup.findAll("div", {"class":"number-card"})
print(draws)
for d in draws:
info = d.find("div",{"class":"field_draw_date"}).getText()
balls = d.find("div",{"class":"field_numbers"}).findAll("div",{"class":"numbers-ball"})
numbers = [ball.getText() for ball in balls]
print(info)
print(numbers)