python - 请求未显示网站代码的所有元素
问题描述
我试图从一个篮球比赛的投注网站上获取赔率。我打开了两个屏幕,一个带有 python,一个带有我检查元素的网站。但是,当我尝试通过查看网站的元素来浏览汤时,代码突然返回:
<div id="table-matches"></div>
Process finished with exit code 0
但是,当我查看网站的元素时,我应该仍然能够进一步导航。有谁知道这汤怎么可能不包含网站上的所有元素(/代码行)?以及我应该如何更改我的代码以便我可以提取每场比赛的赔率?这是我的代码:
import bs4
import lxml
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup
page = 'https://www.oddsportal.com/matches/basketball/20210102/?r=3'
req = Request(page, headers={'User-Agent': 'Mozilla/8.0'})
webpage = urlopen(req).read()
page_soup = soup(webpage, 'html.parser')
odds = page_soup.body.div.div.find('div', id='mother').find('div', id='wrap').div.div.div.find('div',id='col-left').find('div',id='col-content').find('div',id='table-matches')
print(odds)
通过查看网站上的元素,我认为我必须使用.find('table', class_='table-main')
来提取表格。但是,这样做会返回:
None
解决方案
正如 Eric 所说,网页加载了 JS,这意味着当您请求它时数据不存在。这可能是您正在寻找的数据。
代码不包括表头。
from requests_html import HTMLSession
session = HTMLSession()
r = session.get("https://www.oddsportal.com/matches/basketball/20210102/?r=3")
r.html.render()
page_soup = soup(r.html.html, "html.parser")
table = page_soup.table
table_rows = table.find_all("tr")
for tr in table_rows:
td = tr.find_all("td")
row = [i.text for i in td]
if row:
print(row)
推荐阅读
- django - 升级到 PostgreSQL 后 ImageField 的默认值不起作用(Django)
- html - 为什么 min-height 100% 对我的 div 不起作用?
- javascript - HTTP 查询生成器输出
- xml - 如何使用 BeautifulSoup 访问不在 body 标签内的 XML 值
- javascript - AWS VPN 和 Lambda Javascript
- python - Python Openpyxl 和下载问题?
- reactjs - 如何使用给定的初始值进行 useSWR 突变?
- time-complexity - 两个对数函数的小哦符号?
- python - 将标签设置为 seaborn pairplot 的水平和垂直边缘
- r - 在ggplot中将绘图拆分为面板的简单方法?