Как получить ссылку внутри списка, содержащего HTML-элементы? - PullRequest
0 голосов
/ 19 мая 2019

У меня есть такой код

import bs4
import requests

page = requests.get('https://nicmusic.net/category/%D8%A2%D9%87%D9%86%DA%AF- 
    %D9%87%D8%A7%DB%8C-%D8%A7%D8%AD%D8%B3%D8%A7%D9%86-        
    %D8%AE%D9%88%D8%A7%D8%AC%D9%87-%D8%A7%D9%85%DB%8C%D8%B1%DB%8C/')

soup = bs4.BeautifulSoup(page.content, 'html.parser')
button = soup.findAll('a', 'more')
button_link = ([x['href'] for x in button])
the_list = ([bs4.BeautifulSoup(requests.get(z).content,'html.parser').findAll("div", {"class": "dlbox"}) for z in button_link])
    print(the_list)

вывод такой:

[[<div class="dlbox">
<a href="http://dl.nicmusic.net/nicmusic/021/030/Ehsan%20Khajeh%20Amiri%20-%20Bayad%20Bargasht.mp3" rel="external nofollow" target="_blank" title="دانلود">دانلود آهنگ - ( کیفیت عالی 320 )</a>
<a href="http://dl.nicmusic.net/nicmusic/021/030/Ehsan%20Khajeh%20Amiri%20-%20Bayad%20Bargasht%20-%20128.mp3" rel="external nofollow" target="_blank" title="دانلود">دانلود آهنگ - ( کیفیت خوب 128 )</a>
<p> </p>
<audio controls="controls" preload="none">
<source src="http://dl.nicmusic.net/nicmusic/021/030/Ehsan%20Khajeh%20Amiri%20-%20Bayad%20Bargasht%20-%20128.mp3" type="audio/mpeg"/>
</audio>
</div>], 
[<div class="dlbox">
<a href="http://dl.nicmusic.net/nicmusic/020/088/10%20Sahneh.mp3" rel="external nofollow" target="_blank" title="دانلود">دانلود آهنگ - ( کیفیت عالی 320 )</a>
<a href="http://dl.nicmusic.net/nicmusic/020/088/10%20Sahneh%20128.mp3" rel="external nofollow" target="_blank" title="دانلود">دانلود آهنگ - ( کیفیت خوب 128 )</a>
<p> </p>
<audio controls="controls" preload="none">
<source src="http://dl.nicmusic.net/nicmusic/020/088/10%20Sahneh%20128.mp3" type="audio/mpeg"/>
</audio>

Вопрос в том, как мне получить первую ссылку в каждом элементе этого списка?

Ответы [ 3 ]

0 голосов
/ 19 мая 2019

Похоже, вы ищете первую ссылку ".mp3" в вашем адресе.Я использовал приведенную ниже ссылку для поиска всех файлов ".txt" в конкретной ссылке :

Загрузка файлов из Интернета с использованием Python

import requests 
from bs4 import BeautifulSoup 
archive_url="https://github.com/PedramNavid/trump_speeches/blob/master/data/"  
def get_Text_links():       
    # create response object 
    r = requests.get(archive_url)       
    # create beautiful-soup object 
    soup = BeautifulSoup(r.content,'html5lib') 
    # find all links on web-page 
    links = soup.findAll('a') 
    # filter the link sending with .mp4 
    Text_links = [archive_url + link['href'] for link in links if   link['href'].endswith('txt')] 
    return Text_links
get_Text_links()
0 голосов
/ 19 мая 2019

Вы можете использовать запросы. Объект сеанса для эффективности и атрибут с окончанием оператором

from bs4 import BeautifulSoup as bs
import requests

with requests.Session() as s:
    page = s.get('https://nicmusic.net/category/%D8%A2%D9%87%D9%86%DA%AF-%D9%87%D8%A7%DB%8C-%D8%A7%D8%AD%D8%B3%D8%A7%D9%86-%D8%AE%D9%88%D8%A7%D8%AC%D9%87-%D8%A7%D9%85%DB%8C%D8%B1%DB%8C/')
    soup = bs(page.content, 'html.parser')
    links = [item['href'] for item in soup.select('.more')]

    for link in links:
        soup = bs(s.get(link).text, 'html.parser')
        downloads = [item['href'] for item in soup.select('[href$=".mp3"]')]
        if downloads: print(downloads[0])
0 голосов
/ 19 мая 2019

Я бы использовал регулярное выражение для каждого элемента списка.

import re

for elt in list:
    match = re.search(r'href=[\'"]?([^\'" >]+)', elt)
    if match:
        print match.group(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...