使用BeautifulSoup和Python组织抓取的html数据

使用BeautifulSoup和Python组织抓取的html数据,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我想从本页获取日期和设置列表 然后组织它,使其看起来像这样: 1978 08 26紫色泻湖 1978 08 26跳舞的傻瓜 1978 08 26简易肉 亲爱的,你不想要我这样的男人吗 等等,所以演出的日期和播放的歌曲在列中出现在一起 我有这个python代码 import requests from bs4 import BeautifulSoup source = requests.get('https://www.zappateers.com/fzshows/78.html').text s

我想从本页获取日期和设置列表 然后组织它,使其看起来像这样:

1978 08 26紫色泻湖

1978 08 26跳舞的傻瓜

1978 08 26简易肉

亲爱的,你不想要我这样的男人吗

等等,所以演出的日期和播放的歌曲在列中出现在一起

我有这个python代码

import requests
from bs4 import BeautifulSoup
source = requests.get('https://www.zappateers.com/fzshows/78.html').text
soup = BeautifulSoup(source, 'lxml')    

for heading in soup.find_all([ "h4", "p"]):
    
    print(heading.text.strip())
它提取h4标记、日期和地点以及p标记集合列表

但它只是这样打印出来:

1978年8月26日-德国乌尔姆费斯普拉茨弗里德里奇索 该剧的部分镜头是专业拍摄的,请参见Ein Leben als盛典。 紫色的泻湖,跳舞的傻瓜,轻松的肉,亲爱的你不想要一个像我这样的男人吗

我可以做些什么来将其组织在如上所示的列中?谢谢

这应该能帮助您:

import requests
from bs4 import BeautifulSoup
import pandas as pd

source = requests.get('https://www.zappateers.com/fzshows/78.html').text
soup = BeautifulSoup(source, 'lxml')

text = []
dates = []

headings = soup.find_all('h4')

for index,p in enumerate(soup.find_all('p', class_ = "setlist")):
    h = headings[index]
    for x in range(len(p.text.strip().split(','))):
        if '-' in h.text:
            dates.append(h.text.strip().split('-')[0].strip())
    if '-' in h.text:
        text.append(p.text.strip().split(','))

text = [item for sublist in text for item in sublist]

df = pd.DataFrame([dates,text]).T
df.columns = ['Date','Title']
print(df)
输出:

           Date                                      Title
0    1978 08 26                          The Purple Lagoon
1    1978 08 26                               Dancin' Fool
2    1978 08 26                                  Easy Meat
3    1978 08 26        Honey Don't You Want A Man Like Me?
4    1978 08 26                            Keep It Greasey
..          ...                                        ...
462  1978 10 31                              Suicide Chump
463  1978 10 31                       Improvisations In Q*
464  1978 10 31               Why Does It Hurt When I Pee?
465  1978 10 31   Improvisations (incl. Hail Caesar Theme)
466  1978 10 31                              Magic Fingers

[467 rows x 2 columns]
您还可以通过在代码中添加以下行将这些详细信息发送到csv文件:

df.to_csv('D:\\Songs.csv',index = False)
csv文件的屏幕截图:


链接正确吗?它不会为我加载。歌曲位于带有class属性setlist的p标记中。然而,有些日期缺少歌曲,例如1978 09 08,这使它变得棘手。我们不能只是迭代寻找h4,然后p class=setlist标记。URL是正确的。这对我有用。还有其他人有问题吗?请注意,1978年10月15日,您有3个p标签,其中class=setlist,一个用于早播,一个用于晚播。某些日期丢失了

标签,这会弄乱歌曲。e、 g.打印完整的数据框并查看1978 09 08。它显示了1978 09 09的歌曲也注意到1978 10 15,其中有3个p标签,class=setlist,一个用于早期节目,一个用于后期节目谢谢!工作完美。我尝试使用df,但无法计算出阵列的不同长度。我现在将有你的代码学习形式。我希望我能不止一次地投票支持这一点。谢谢again@Sushil嗨,我一直在努力解决一些问题。当标签使用class=ErrorDate时,这些标签会被拉进来并将歌曲列表弄乱。。我认为buran在上面提到了这一点。我将这一行的headers=soup.find_all'h4'改为headers=soup.find_all'h4',class_=None,当URL位于但不在上面的原始URL上时,它会工作。另一个问题是,当有一个h5标签上写着“早播”或“晚播”等字样时,它们不会被添加到阵列中。我试图让它工作,但惨败了。请帮忙?为了更好地说明,我想搜集的数据如下:DATE