🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

228閲覧

requestsで取得したデータからurlだけを抽出したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/10/27 09:29

前提・実現したいこと

requestsで取得した下記のデータからurlだけを抽出したいです。

[<a href="https://db.sp.netkeiba.com/horse/2016102179/" title="ダノンキングリー">ダノンキングリー</a>,
<a href="https://db.sp.netkeiba.com/horse/2014105785/" title="アエロリット">アエロリット</a>,
<a href="https://db.sp.netkeiba.com/horse/2015104688/" title="インディチャンプ">インディチャンプ</a>,
<a href="https://db.sp.netkeiba.com/horse/2014105258/" title="ペルシアンナイト">ペルシアンナイト</a>,
<a href="https://db.sp.netkeiba.com/horse/2016104650/" title="ランフォザローゼス">ランフォザローゼス</a>,
<a href="https://db.sp.netkeiba.com/horse/2014110031/" title="モズアスコット">モズアスコット</a>,
<a href="https://db.sp.netkeiba.com/horse/2015104317/" title="ギベオン">ギベオン</a>,
<a href="https://db.sp.netkeiba.com/horse/2015104624/" title="ハッピーグリン">ハッピーグリン</a>,
<a href="https://db.sp.netkeiba.com/horse/2015100344/" title="ケイアイノーテック">ケイアイノーテック</a>,
<a href="https://db.sp.netkeiba.com/horse/2015100744/" title="マイネルファンロン">マイネルファンロン</a>]

該当のソースコード

import requests from bs4 import BeautifulSoup url = 'https://race.sp.netkeiba.com/?pid=race_result&race_id=201905040211' html = requests.get(url) soup = BeautifulSoup(html.content, 'html.parser') urls = soup.find_all(href=re.compile('horse')) urls

試したこと

正規表現を使えばいいと思うのですが、具体的にどうすればいいのかが分かりません。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/10/27 14:46

現状のコードで何が問題ですか? 正規表現を使って抽出できていると思うのですが。
guest

回答2

0

ベストアンサー

import requests from bs4 import BeautifulSoup import re url = 'https://race.sp.netkeiba.com/?pid=race_result&race_id=201905040211' response = requests.get(url) response.encoding = response.apparent_encoding soup = BeautifulSoup(response.text, 'html.parser') link = soup.find_all('a') for links in link: if 'href' in links.attrs: href = links.attrs['href'] if re.match('https://db.sp.netkeiba.com/horse/\d', href): print(href) else: pass

で取得することが出来ました。

投稿2019/11/09 05:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問者様の言いたいことがあまり見えなかったので、
草案として以下を提案します。
クソダサいコードですみません。

python

1import requests 2from bs4 import BeautifulSoup 3import re 4 5url = 'https://race.sp.netkeiba.com/?pid=race_result&race_id=201905040211' 6html = requests.get(url) 7soup = BeautifulSoup(html.content, 'html.parser') 8 9urls = soup.find_all(href=re.compile('horse')) 10 11for i in urls: 12 geturl = str(i) 13 print(geturl[9:53]) 14 15
実行結果 https://db.sp.netkeiba.com/horse/2016102179/ https://db.sp.netkeiba.com/horse/2014105785/ https://db.sp.netkeiba.com/horse/2015104688/ https://db.sp.netkeiba.com/horse/2014105258/ https://db.sp.netkeiba.com/horse/2016104650/ https://db.sp.netkeiba.com/horse/2014110031/ https://db.sp.netkeiba.com/horse/2015104317/ https://db.sp.netkeiba.com/horse/2015104624/ https://db.sp.netkeiba.com/horse/2015100344/ https://db.sp.netkeiba.com/horse/2015100744/

このコードは、今回のコードでしか使えないので、
汎用性皆無です。
一応これで、URLだけ取得できていると思います。

投稿2019/10/27 19:25

Akihito_Jv

総合スコア64

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問