【问题标题】:How can i extract information from bs4.element.Tag and save it in array?如何从 bs4.element.Tag 中提取信息并将其保存在数组中?
【发布时间】:2019-06-27 15:43:33
【问题描述】:

我正在尝试从http://los40.com.ar/lista40/ 下载所有歌曲列表,我可以手动下载,但我想自动化这个过程。首先,我用美味的汤提取了 ulrs,但我无法浏览结果

例如,这是列表中的第一首歌曲:

  var datos_cancion_1 = Array();
  datos_cancion_1['url_audioenci']         = 'https://recursosweb.prisaradio.com/audios/dest/010002713547.mp4';
  datos_cancion_1['url_muzu']         = '';
  datos_cancion_1['url_youtube']      = 'https://www.youtube.com/watch?v=0S3enulCT8E';
  datos_cancion_1['url_itunes']       = '';
  datos_cancion_1['posicion']         = '1';
  datos_cancion_1['url_caratula']     = 'https://recursosweb.prisaradio.com/fotos/dest/010002713548.jpg';
  datos_cancion_1['titulo_cancion']   = '22';
  datos_cancion_1['nombre_artista']   = 'Greeicy;Tini';
  datos_cancion_1['idYes']            = 'Tini';
  datos_cancion_1['VidAu']            = 0;

我想获得一个数组或 json 像:['https://recursosweb.prisaradio.com/audios/dest/010002713547.mp4','https://recursosweb.prisaradio.com/fotos/dest/010002713548.jpg,Greeicy;Tini] [datos_cancion_1['url_audioenci'],datos_cancion_1['url_caratula'],]

这是我的代码,希望你能帮助我:

from bs4 import BeautifulSoup
import requests
import json
import re
import urllib

url = 'http://los40.com.ar/m/lista40/'
videos = []
response = requests.get(url)
bs = BeautifulSoup(response.text,"html.parser")
all_script=bs.find_all('script', language='javascript', type='text/javascript')
data=all_script[8:]
a= data[0].string

b=['https://recursosweb.prisaradio.com/audios/dest/010002713547.mp4','https://recursosweb.prisaradio.com/fotos/dest/010002713548.jpg','Greeicy;Tini', datos_cancion_1['nombre_artista'] ]
print(a)
urllib.request.urlretrieve(b[0],b[2] +'.mp3')

【问题讨论】:

    标签: arrays regex python-3.x string beautifulsoup


    【解决方案1】:

    你可以试试这个:

    song_list = [''.join(' '.join(i.text.split('\n')).split('=')).split(';') for i in data]
    

    这会给你一个数组,每个数组都是这样的:

    ["'https://recursosweb.prisaradio.com/audios/dest/010002696230.mp4'",
     "   datos_cancion_2['url_muzu']          ''",
     "   datos_cancion_2['url_youtube']       "
     "'https://www.youtube.com/watch?v1Jw_mhoCiFY'",
     "   datos_cancion_2['url_itunes']        ''",
     "   datos_cancion_2['posicion']          '2'",
     "   datos_cancion_2['url_caratula']      "
     "'https://recursosweb.prisaradio.com/fotos/dest/010002696233.jpg'",
     "   datos_cancion_2['titulo_cancion']    'Cristina'",
     "   datos_cancion_2['nombre_artista']    'Sebastián Yatra'",
     "   datos_cancion_2['idYes']             'Sebastian-Yatra'",
     "   datos_cancion_2['VidAu']             0",
     ' ']
    

    从这里我认为您将能够根据需要订购最终的数组。

    希望对你有所帮助。

    【讨论】:

    • 是的,我尝试过,但我唯一想对我的数组感兴趣的是值。例如 ['recursosweb.prisaradio.com/audios/dest/… 我不需要像 datos_cancion_2['url_muzu'] 这样的值
    • 您可以使用 re.sub() 函数删除这两个模式中的所有内容: pattern_1 = "\sdatos_cancion_[0-9]['[a-zA-Z] *_[a-zA-Z]']\s*" pattern_2 = "\sdatos_cancion_[0-9]['[a-zA-Z]']\s *" re.sub(pattern , '' , element_of_song_list)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 2021-02-27
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多