yuhtaryouko
@yuhtaryouko (Yuta Kato)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

取得したリンクに文字列を追加したい

解決したいこと

動画を自動でダウンロードするプログラムを組みたいと考えています。
ダウンロードをする動画が存在する対象URLはサムネが複数並び、サムネや動画タイトルをクリックするとその先のURLで動画が再生されるという形式です。
(youtubeのトップ画面と同じような見た目の構造)

1.サムネや動画タイトルに埋め込まれたリンクURLをリストとして集める

2.のちにまとめてダウンロード

こういった流れを考えています。

対象URLにアクセス

requestsで情報取得

BeautifulSoupでパース

そこからaタグを抽出してリンクURLをリスト化

ffmpegでダウンロード(できたらいいな)

という流れを想定しています。

ここで2点分からないことがあります

from bs4 import BeautifulSoup
import requests
import time

url = 'https://www.fnn.jp/'
res = requests.get(url)
time.sleep(3)

soup = BeautifulSoup(res.text, 'html.parser')

get_a = soup.find_all('a')
#ここまでは順調に機能

分からないこと1

【get_a】に含まれるaタグは
【a class=○○○○ href="/○○○○/】という形式が複数出てきます。

例:a class="m-article-item__link" href="/articles/-/344071"

となっており、この中の【href="/articles/-/344071】だけを抽出したいです。

get_link = get_a.find_all('href')

ですとか、

get_link = get_a.find_all(class_='href')

という記述をしたのですが、attribute errorと表記されてしまいます。
soup.find_allの記述は機能したのに、get_a.find_all()とするとエラーになる理由が分かりません。
どうしたらhref=の部分だけを抽出できるのでしょうか。

分からないこと2

抽出したい対象の【href="/articles/-/344071】に【https://】を追加して
https://articles/-/344071】という形式にしたURLを集めたいのですが、どのように記述したらいいのか分かりません。

自分で試したこと

全くとっかかりがなくて検索などもうまくできていません。

0

3Answer

全くとっかかりがなくて検索などもうまくできていません。

Qiitaで、「python bs4 href」で検索してみてはいかがでしょう?

for a in soup.find_all('a'):
    href = a['href']
    if href.startswith('/article'):
        print('https:/' + href)
0Like

Comments

  1. コードを追記してみました。
  2. 辞書データへのアクセスです。

ありがとうございます!参考になりそうなトピックタイトルがちらほら…
色々読んでみます。

0Like

1.href リストを取得

href_list = soup.find_all('a', href=True)

2.Forを使って一つずつ文字列を追加

for a in href_list:
    url = "https:/" + a['href']
    print(url)

でできます。

image.png

が、https://articles/-/344071
に接続してもURLが存在しない、というエラーとなるので
動画のURLが間違っているようです。
URLが正しくなるように文字列を設定すれば良さそうです。

コード

from bs4 import BeautifulSoup
import requests

url = 'https://www.fnn.jp/'
res = requests.get(url)

soup = BeautifulSoup(res.text, 'html.parser')

href_list = soup.find_all('a', href=True)
for a in href_list:
    url = "https:/" + a['href']
    print(url)
0Like

Comments

  1. @yuhtaryouko

    Questioner

    href=true という記述なんて全く知りませんでした。。
    ありがとうございます!めちゃくちゃ勉強になりました。

Your answer might help someone💌