我正在尝试抓取网站https://www.livechart.me/winter-2019/tv,以获取当前本季某些节目的播出次数。我通过提取“ episode-countdown”标签数据来完成此操作,该数据给出类似“ EP11:”的信息,然后在其后添加时间戳,然后将字符串切成仅给出数字(在这种情况下为“ 11”),然后减去以1表示当前播出的剧集数(如EP11播出的时间戳)。
我有一个本赛季我正在观看的不同节目的列表,目的是过滤我提取情节倒数字符串的节目,而不是为每次播放的节目都提取倒数。我遇到的最大问题是“ episode-countdown”字符串的顺序与我正在观看的节目列表的顺序不同。例如,如果我的列表为[show1,show2,show3,show4],则如果按网站上的顺序列出它们,则可能会按照show3,show4,show1,show2的顺序获得“ episodes-countdown”字符串标签。
我当前的代码如下:
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
def countdown():
html = Request('https://www.livechart.me/winter-2019/tv', headers={'User-Agent': 'Mozilla/5.0'})
page = urlopen(html)
soup = BeautifulSoup(page, 'html.parser')
shows = ['Jojo no Kimyou na Bouken: Ougon no Kaze', 'Dororo', 'Mob Psycho 100 II', 'Yakusoku no Neverland']
for tag in soup.find_all('article', attrs={'class': 'anime'}):
if any(x in tag['data-romaji'] for x in shows):
rlist = tag.find('div', attrs={'class': 'episode-countdown'}).text
r2 = rlist[:rlist.index(":")][2:]
print('{} has aired {} episodes so far'.format(tag['data-romaji'], int(r2)-1))
网站上列出的每个节目都在“文章”标签内,因此对于汤.find_all()语句中的每个节目,如果“ data-romaji”(网站上列出的节目名称)与在我的“节目”列表中显示,然后提取“ episode-countdown”字符串,然后按照前面的说明将其切成正好数字,然后打印以确保正确执行了操作。
如果您访问网站,则显示节目的顺序为“ Yakusoku no Neverland”,“ Mob Psycho”,“ Dororo”和“ Jojo”,这是在其中获得情节倒数字符串的顺序如果您运行代码。我想要做的是按照“节目”列表的顺序排列它,这样我就可以得到一个节目列表和一个播出的彼此匹配的情节列表。我想将播出的播出列表添加为当前正在构建的熊猫数据框中的一列,因此使其与“ shows”列不匹配。
我是否可以根据我的“表演”列表的顺序而不是网站上使用的顺序来提取“ episode-countdown”字符串?(如果这样)?
答案 0 :(得分:0)
这是您要找的吗?
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
import pandas as pd
html = Request('https://www.livechart.me/winter-2019/tv', headers={'User-Agent': 'Mozilla/5.0'})
page = urlopen(html)
soup = BeautifulSoup(page, 'html.parser')
shows = ['Jojo no Kimyou na Bouken: Ougon no Kaze', 'Dororo', 'Mob Psycho 100 II', 'Yakusoku no Neverland']
master = []
for show in shows:
for tag in soup.find_all('article', attrs={'class': 'anime'}):
show_info = []
if show in tag['data-romaji']:
show_info.append(tag['data-romaji'])
rlist = tag.find('div', attrs={'class': 'episode-countdown'}).text
r2 = rlist[:rlist.index(":")][2:]
show_info.append(r2)
master.append(show_info)
df=pd.DataFrame(master,columns=['Show','Episodes'])
df
输出:
Show Episodes
0 Jojo no Kimyou na Bouken: Ougon no Kaze 23
1 Dororo 11
2 Mob Psycho 100 II 11
3 Yakusoku no Neverland 11