熊猫返回空数据框

杰森·比德(JasonBeedle)

我正在尝试抓取一个JavaScript重的网站。我正在尝试获取特定列的内容。该页面需要加载,然后导航到新页面。我想从页面中提取体育信息。

我正在使用Pandas BeautifulSoupSelenium

导航到下一页工作正常,并且加载等待时间。下面是BeautifulSoup代码:

soup = BeautifulSoup(results.get_attribute("outerHTML"), 'html.parser')
time = []  # Time
sport = []  # Sport Name
description = []  # Sport Description

以下是将搜索xPath页面特定部分的代码

# Programme time
for item in soup.select("guide___1Ogg9"):
    if item.find_next(find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[3]/div/ul/div[2]/ul/li/ul/li[2]/a/div[1]'):
        time.append(item.find_next(
            find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[3]/div/ul/div[2]/ul/li/ul/li[2]/a/div[1]').text.strip())
    else:
        time.append("Nan")

# Sport Name
    if item.find_next(find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[3]/div/ul/div[2]/ul/li/ul/li[1]/a/div/div[2]/div[1]/span'):
        sport.append(item.find_next(
            find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[3]/div/ul/div[2]/ul/li/ul/li[1]/a/div/div[2]/div[1]/span').text.strip())
    else:
        sport.append("Nan")

# Programme info
    if item.find_next(find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[4]/div[2]/div/div/ul/div[2]/ul/li/ul/li[4]/a/div[2]'):
        description.append(item.find_next(
            find_element_by_xpath='//*[@id="landing_layers_1"]/div/div[2]/div[4]/div[2]/div/div/ul/div[2]/ul/li/ul/li[4]/a/div[2]').text.strip())
    else:
        description.append("Nan")

下面是将所有数据打印到csv文件中的功能。

df = pd.DataFrame(
    {"Time": time, "Sport": sport, "Info": description})
print("Here is your data. Right I am off to sleep then!")

print(df)
df.to_csv("canalPlusSport.csv")

我试图搜索CSS_SELECTORCLASS_NAME

该网站为https://www.canalplus.com/programme-tv/

在此处输入图片说明

巴杜克

您说的很对,网站很JavaScript繁重,但这可能意味着后端有一个API。而且,实际上,在这种情况下,只有一个。

您可以使用它来获取所需的数据。

这是如何做:

import datetime

import pendulum
import requests
from tabulate import tabulate

api_url = "https://secure-webtv-static.canal-plus.com/metadata/cpfra/all/v2.2/globalchannels.json"
response = requests.get(api_url).json()

tv_programme = {
    channel["name"]: [
        [
            e['title'],
            e['subTitle'],
            pendulum.parse(e['timecodes'][0]['start']).time().strftime("%H:%M"),
            datetime.timedelta(
                milliseconds=e['timecodes'][0]['duration'],
            ).__str__().rsplit(".")[0],
        ] for e in channel["events"]
    ] for channel in response["channels"]
}


print(tabulate(
    tv_programme["CANAL+"],
    headers=["Title", "Subtitle", "Time", "Duration"],
    tablefmt="sql",
))

输出(对于CANAL+,但您可以尝试任何渠道):

Title                                                                     Subtitle                         Date    Duration
------------------------------------------------------------------------  -------------------------------  ------  ----------
Canal Football Club - Samedi - 1re édition                                Mag Foot                         19:30   0:23:00
Avant-match Ligue 1                                                       Mag Foot                         19:58   0:04:36
Nice / Lyon                                                               16e journée                      20:02   0:50:00
Canal Football Club - Samedi - 2ème édition                               Mag Foot                         21:59   0:55:00
Zapsport                                                                  Mag Sport                        22:56   0:03:41
Le Plus                                                                   Le Show de Noël Must Go on Date  23:00   0:01:59
Le journal du hard                                                        Mag Adultes                      23:02   0:01:07
Une nuit à Budapest                                                       Film Adultes                     23:03   1:32:14
Furie                                                                     Film Suspense                    00:35   1:33:49
Zombi Child                                                               Film Emotion                     02:10   1:38:39
Veuillez parler sans arrêt et décrire vos expériences au fur et à mesure  Court-Metrage                    03:49   0:09:04
Le grand rendez-vous                                                      Court-Metrage                    03:58   0:05:39
Golf - US Open féminin                                                    3e tour                          04:05   1:08:26

编辑:

要列出所有频道,只需添加 print("\n".join(sorted(list(tv_programme.keys()))))

这会给你这个:

6TER
AB1
ACTION
ALTICE STUDIO
ANIMAUX
ARTE
ASTROCENTER TV
AUTOMOTO LA CHAINE
BBC WORLD NEWS
BEIN SPORTS 1
BEIN SPORTS 2
BEIN SPORTS 3
BEIN SPORTS MAX 10
BEIN SPORTS MAX 4
BEIN SPORTS MAX 5
BEIN SPORTS MAX 6
BEIN SPORTS MAX 7
BEIN SPORTS MAX 8
BEIN SPORTS MAX 9
BET
BFM BUSINESS
BFM TV
BOB TV
BOING
BOOMERANG
BSMART TV
C8
C8 (CH)
CANAL 9
CANAL ALPHA NE
CANAL J
CANAL+
CANAL+ (CH)
CANAL+ CINEMA
CANAL+ CINEMA (CH)
CANAL+ DECALE
CANAL+ DECALE (CH)
CANAL+ FAMILY
CANAL+ FAMILY (CH)
CANAL+ FORMULA1
CANAL+ LIGUE1
CANAL+ MOTOGP
CANAL+ PREMIER LEAGUE
CANAL+ SERIES
CANAL+ SPORT
CANAL+ SPORT (CH)
CANAL+ TOP14
CANAL+ UHD
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

熊猫合并返回空数据框

来自分类Dev

数据框loc返回空数据框(熊猫)

来自分类Dev

多个数据框的熊猫串联返回空值

来自分类Dev

多个数据框的熊猫串联返回空值

来自分类Dev

捕获异常并返回空数据框

来自分类Dev

捕获异常并返回空数据框

来自分类Dev

为什么pandas.read_json()返回空数据框

来自分类Dev

如果没有满足条件的行,则返回空数据框

来自分类Dev

pandas.read_csv 返回空数据框

来自分类Dev

熊猫-分组后返回数据框

来自分类Dev

如何从ipywidgets输出返回熊猫数据框

来自分类Dev

使用BeautifulSoup返回熊猫数据框

来自分类Dev

从while循环返回熊猫数据框

来自分类Dev

熊猫iloc返回空结果

来自分类Dev

onActivityResult 返回空数据

来自分类Dev

如何从应用返回正确格式化的熊猫数据框?

来自分类Dev

在熊猫数据框中返回相关列的组

来自分类Dev

如何在熊猫数据框中返回值的“负数”?

来自分类Dev

返回熊猫数据框中特定值的列名

来自分类Dev

比较2个数据框熊猫,返回错误值

来自分类Dev

熊猫groupby申请返回一个数据框

来自分类Dev

查询数据框时是否可以强制熊猫返回视图?

来自分类Dev

比较熊猫数据框中的值并返回新值

来自分类Dev

从熊猫数据框中的列表中返回匹配元素

来自分类Dev

熊猫从许多数据框中查找并返回相应的值

来自分类Dev

返回熊猫数据框中相关列的组

来自分类Dev

熊猫数据框过滤列和返回列名称

来自分类Dev

返回熊猫数据框中特定值的列名

来自分类Dev

排序的熊猫数据框根据格式返回不同的值