python - 网页抓取 Javascript 表的问题
问题描述
我是网络抓取的新手,我正试图从这个网站上抓取表格:https ://www.eloratings.net/2016_European_Championship
import pandas as pd
import requests
from bs4 import BeautifulSoup
url = 'https://www.eloratings.net/2016_European_Championship'
r = requests.get(url).text
soup = BeautifulSoup(r, "html.parser")
df = pd.read_html(str(soup.find_all('table')))
我收到“未找到表”错误。
如果我尝试使用索引来查找表:
df = pd.read_html(str(soup.find_all('table')[0]))
我得到“列表索引超出范围”。
我也尝试过使用 Json 包和 Helium/Selenium 网络驱动程序,但我无法使任何工作。
解决方案
使用端点获取.tsv
响应。将其转储到文件中,然后使用pandas
.
就是这样:
import time
import pandas as pd
import requests
url = f"https://www.eloratings.net/2016_European_Championship.tsv?={int(time.time())}"
table = requests.get(url).content
with open("table_data.tsv", "wb") as f:
f.write(table)
df = pd.read_csv("table_data.tsv", sep="\t", header=None)
print(df)
输出:
1 3 DE 2016 1.1 2223 8 ... 532 201 185 2053 1090 −1 −19
0 2 4 FR 1983 1 2137 17 ... 389 253 168 1426 1171 +3 +8
1 3 6 PT 1959 2 2020 20 ... 269 171 133 935 685 +6 +50
2 4 8 IT 1950 1 2132 8 ... 412 157 216 1348 790 +7 +75
3 5 9 ES 1940 1 2165 7 ... 385 129 148 1295 605 −4 −53
4 6 11 EN 1913 1 2212 4 ... 595 191 234 2403 1012 −3 −58
5 7 14 BE 1891 4 1959 24 ... 311 282 160 1293 1250 −4 −32
6 8 16 HR 1849 5 2006 12 ... 148 55 76 493 272 +2 +31
7 9 18 PL 1824 2 2082 30 ... 348 262 200 1376 1105 +6 +58
8 10 19 TR 1816 10 1900 42 ... 209 215 125 739 802 −2 −13
9 11 20 CH 1803 9 1917 28 ... 263 341 168 1113 1336 +2 +31
10 12 23 WA 1779 3 1906 22 ... 196 302 134 790 1067 +24 +124
11 13 26 SK 1759 17 1774 39 ... 105 95 64 375 345 −2 −7
12 13 26 IE 1759 4 1918 22 ... 227 250 161 862 1050 +4 +1
13 15 31 IS 1742 27 1754 83 ... 123 208 77 485 695 +14 +76
14 16 32 UA 1739 15 1847 36 ... 103 64 65 319 228 −16 −98
15 17 33 SE 1735 2 2014 16 ... 492 294 217 2039 1341 −7 −29
16 18 37 HU 1723 1 2231 18 ... 445 286 200 1949 1397 +5 +27
17 19 38 RO 1719 5 1945 26 ... 310 212 172 1143 889 −9 −40
18 20 39 CZ 1718 1 2038 12 ... 371 226 172 1432 958 −8 −37
19 21 40 AT 1713 1 2067 20 ... 311 282 163 1365 1209 −19 −64
20 22 43 RU 1694 1 2080 22 ... 358 147 178 1203 661 −15 −66
21 23 51 EI 1642 14 1850 38 ... 138 249 131 536 812 +2 +18
22 24 53 AL 1634 33 1634 75 ... 76 165 66 274 485 +1 +17
[23 rows x 33 columns]
推荐阅读
- python - 为什么 sys.path.insert 不使用最新的 python 包?
- javascript - 如果事件有规则,则在 eventClick 中返回具有 null 结束值的事件
- java - 如何在多个 mongo 存储库上使用 QueryDSL?
- sql - UPDATE TOP 会导致死锁吗?
- java - 未经授权的 [401] 肥皂
- ionic-framework - 如何在 Ionic 4 中获取离子组件的宽度?例如:离子网格
- python - 如何使用 str 默认值注释采用 AnyStr 的函数?
- azure - 如何在 Azure WAF 中防止误报阻止密码字段
- c# - 具有泛型 c# 的 API 控制器
- firebase - 如何减少 Cloud Firestore 读取?