Python 网页抓取到.csv
我对Python还是很陌生,如果这是一个愚蠢的问题,那么很抱歉。我一直在使用以下脚本从网站上抓取一些数据并导出到.csv文件:Python 网页抓取到.csv,python,csv,web-scraping,beautifulsoup,export-to-csv,Python,Csv,Web Scraping,Beautifulsoup,Export To Csv,我对Python还是很陌生,如果这是一个愚蠢的问题,那么很抱歉。我一直在使用以下脚本从网站上抓取一些数据并导出到.csv文件: import requests from bs4 import BeautifulSoup import pandas as pd res = requests.get('https://gol.gg/teams/list/season-ALL/split-ALL/tournament-LCS%20Summer%202020/') soup = BeautifulS
import requests
from bs4 import BeautifulSoup
import pandas as pd
res = requests.get('https://gol.gg/teams/list/season-ALL/split-ALL/tournament-LCS%20Summer%202020/')
soup = BeautifulSoup(res.text, 'html.parser')
table = soup.find("table", class_="table_list playerslist tablesaw trhover")
columns = [i.get_text(strip=True) for i in table.find("thead").find_all("th")]
data = []
table.find("thead").extract()
for tr in table.find_all("tr"):
data.append([td.get_text(strip=True) for td in tr.find_all("td")])
df = pd.DataFrame(data, columns=columns)
df.to_csv("S10-NA-AVGs.csv", index=False)
我在尝试使用相同的脚本收集其他数据并导出到.csv时遇到问题。该网站是:
我知道数据在html代码中的布局是不同的,这就是我对它要获取的内容有点混淆的地方。它似乎是一个单独字段存储的地方,因此我尝试改变这一行:
columns = [i.get_text(strip=True) for i in table.find("thead").find_all("th")]
这就是我收到错误消息的地方:
AttributeError:“非类型”对象没有属性“查找”
我试着把“th”和“thead”改成几个不同的变体,但没有成功。
任何帮助都将不胜感激。页面是否包含这些标签?您可以在出现错误的那一行放置一个断点,然后在IDE的监视区域中尝试多种方法,看看有什么和没有什么 您是否考虑过将其作为编写应用程序的一种方式?它有体面的内置功能和良好的教程在官方网站上。此外,您还可以将代码封装在类中,例如,使用自己的逻辑为每个网站创建不同的spider类。这样,如果您将代码划分为类和方法,而不是全部写入一个文件中,那么即使在开发过程中,您的代码也会更具可读性。这是因为第二个网页中的“class”属性与第一个网页中的“class”属性不同 在针对第二个url运行脚本时,是否尝试将类名更改为
completestats tablesaw
soup.find()
在html页面中找不到您要求它查找的元素时,将返回None。的文档使用pandas
完成所有工作怎么样,因为您已经在使用它了
import requests
import pandas as pd
res = requests.get('https://gol.gg/game/stats/25989/page-fullstats/')
df = pd.read_html(res.text, skiprows=[0])
df = pd.concat(df)
df.to_csv("data.csv", index=False)
print(df)
输出:
[ Player Huni Svenskeren ... Ryoma Cody Sun Poome
0 Role TOP JUNGLE ... MID ADC SUPPORT
1 Kills 2 0 ... 5 4 2
2 Deaths 5 6 ... 2 2 1
3 Assists 3 5 ... 10 12 16
4 KDA 1 0.8 ... 7.5 8 18
5 CS 186 136 ... 210 217 27
6 CS in Team's Jungle 4 80 ... 8 8 0
7 CS in Enemy Jungle 0 0 ... 0 6 0
8 CSM 7.6 5.5 ... 8.6 8.8 1.1
9 Golds 8723 7059 ... 11074 11275 7255
10 GPM 355 288 ... 451 459 296
11 GOLD% 21.9% 17.7% ... 20.5% 20.8% 13.4%
12 Vision Score 14 24 ... 27 37 52
13 Wards placed 7 7 ... 9 9 34
14 Wards destroyed 4 3 ... 3 10 5
15 Control Wards Purchased 0 6 ... 7 2 10
16 VSPM 0.57 0.98 ... 1.1 1.51 2.12
17 WPM 0.29 0.29 ... 0.37 0.37 1.38
18 VWPM 0 0.24 ... 0.29 0.08 0.41
19 WCPM 0.16 0.12 ... 0.12 0.41 0.2
20 VS% 9% 15.4% ... 15.6% 21.4% 30.1%
21 Total damage to Champion 11637 11069 ... 9516 12053 3669
22 Physical Damage 6533 9367 ... 166 11214 604
23 Magic Damage 5104 395 ... 9340 755 3065
24 True Damage 0 1307 ... 10 84 0
25 DPM 474 451 ... 388 491 149
26 DMG% 24.1% 22.9% ... 17.4% 22% 6.7%
27 K+A Per Minute 0.2 0.2 ... 0.61 0.65 0.73
28 KP% 83.3% 83.3% ... 65.2% 69.6% 78.3%
29 Solo kills NaN NaN ... NaN NaN NaN
30 Double kills 0 0 ... 1 2 0
31 Triple kills 0 0 ... 0 0 0
32 Quadra kills 0 0 ... 0 0 0
33 Penta kills 0 0 ... 0 0 0
34 GD@15 -2492 -1117 ... -21 -1272 -292
35 CSD@15 -9 -27 ... -29 -1 -6
36 XPD@15 -1149 -1627 ... -191 -287 -1322
37 LVLD@15 -1 -1 ... 0 0 -1
38 Damage dealt to turrets 0 883 ... 1557 4582 717
39 Total heal 1010 5737 ... 2600 2343 3120
40 Damage self mitigated 16638 10704 ... 16506 5476 11927
41 Time ccing others 26 16 ... 18 26 11
42 Total damage taken 18869 19320 ... 14264 11844 9137
这将为您提供一个漂亮的.csv
文件:
奖励:该代码还可用于其他URL:
import requests
import pandas as pd
res = requests.get('https://gol.gg/teams/list/season-ALL/split-ALL/tournament-LCS%20Summer%202020/')
df = pd.read_html(res.text, skiprows=[0])
df = pd.concat(df)
print(df)
印刷品:
100 Thieves S10 NA 18 38.9% ... 33.3 1976 3.0 1.23 1.35
0 CLG S10 NaN 19 26.3% ... 32.6 1790 3.3 1.21 1.30
1 Cloud9 S10 NaN 18 72.2% ... 33.4 1971 3.0 1.12 1.30
2 Dignitas S10 NaN 19 31.6% ... 32.7 1590 3.1 1.27 1.33
3 Evil Geniuses S10 NaN 18 44.4% ... 32.2 1920 3.3 1.39 1.41
4 FlyQuest S10 NaN 18 66.7% ... 32.8 1856 3.3 1.21 1.77
5 Golden Guardians S10 NaN 18 50.0% ... 33.8 1992 3.4 1.26 1.53
6 Immortals S10 NaN 18 22.2% ... 31.1 1717 3.3 1.35 1.46
7 Team Liquid S10 NaN 18 83.3% ... 33.6 1784 3.4 1.24 1.51
8 TSM S10 NaN 18 66.7% ... 32.5 1741 3.2 1.33 1.33
这是一个极为常见的问题,可能是在运行for循环时,
表
变量未定义。直到现在我还没有运行您的代码,但是在for循环的某个迭代中,var表
的类型肯定是None
哦,这太棒了!那太完美了。这样做肯定更有意义,而且看起来也不错。非常感谢您的回复,非常感谢您的指导。不客气,如果您觉得我的答案有用,请投票并/或接受。我不知道答案有一个接受按钮。这个网站还是新的。刚刚接受了。再次感谢你!