実現したいこと
https://www.keibalab.jp/db/race/202501130711/
このページ内の全てのリンクのURLを抜き出して、リストall_linksの中に要素として入れたのちに、内包表記を利用して/db/horse/を要素内に持つもののみを要素とした新しいリストhorse_linksを作成したい。
前提
【python最速データ収集術】と【python2年生スクレイピングのしくみ】という本を参考に、ネットでもいろいろと調べながらプログラミングを進めています。
(ちなみに実際にそれで競馬の平均タイム一覧が載っているサイトをスクレピングしてページ遷移をしながらすべての平均タイムをExcelに書き込むというプログラムを自力で作成したことがあります。)
開発者ツールで上記URLで取得したい部分のhtmlを見たところ、おそらくpython2年生の63ページ下部に載っていたコードのコピペでいけるのではないかと思ったのですが、それをコピペし実行しただけでもエラーがでていないのにURLが取得できていない、という状況なので非常に困っています。
発生している問題・エラーメッセージ
エラーは発生していないが、取得できているはずのURLがターミナルにprintされないので困っています。
該当のソースコード
#ソースコード import requests from bs4 import BeautifulSoup load_url = "https://www.keibalab.jp/db/race/202501130711/" html = requests.get(load_url) soup = BeautifulSoup(html.content,"html.parser") all_links = [] # sp = soup.find("tbody") # ←この部分があったほうがいいのか不明 for element in soup.find_all("a"): print(element.text) url = element.get("href") print(url) all_links.append(element) print("↓ここからリストの中身") horse_links = [l for l in all_links if "/db/horse/" in l] for x in horse_links: print(x) ####################################### #ちなみにpython2年生の63ページのコピペというのはこの部分です #import requests #from bs4 import BeautifulSoup #load_url = "https://www.keibalab.jp/db/race/202501130711/" #html = requests.get(load_url) #soup = BeautifulSoup(html.content,"html.parser") #for element in soup.find_all("a"): #print(element.text) #url = element.get("href") #print(url) #######################################
補足情報 なぜかrequests.getのgetは黄色なのにelement.getのgetは白色です。動かない理由と関係があるのかはわかりませんが...
print(soup) を実行してみると判るかと思います。("You don't have permission to access this resource.")
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
</body></html>
コメントありがとうございます。
コメントいただいた通りにとりあえずprint(soup)をして、かつ、この状態について軽く検索してみました。
私は初心者でこの状態について知らなかったので、的外れなことを言っているかもしれませんが、競馬ラボの利用規約にスクレイピング禁止と書いておらず、かつ、このサイトの別のページにスクレイピングをし情報を取得できているプログラムも発見することができました。https://saisaikenken.hatenablog.com/entry/2021/10/05/163922
(おそらくheadlesschromeというものを使っている?)
なので https://teratail.com/questions/156800 の質問にあるように、UserAgentをリクエストに与えるかHeadlessChromeを使用する、という方向性で考えていけばよいのでしょうか?
また、UserAgentかHeadlessChromeを利用するようにコードを書き換えるだけでよいのでしょうか?
それ以外の部分は、目的を達成できるような正しいコードに現状なっているという認識で大丈夫でしょうか?
ご返信いただければ幸いです。

回答1件
あなたの回答
tips
プレビュー