質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

463閲覧

pythonのスクレイピング、for文がうまく機能しない

kkmoto

総合スコア3

Python 3.x

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

0グッド

0クリップ

投稿2022/09/18 10:06

編集2022/09/18 10:07

前提

jupyter notebookでpythonプログラミングの勉強をしています
はてなブックマークというサイトをスクレイピングしようと考えているのですが、
想定している出力をしていないので質問させていただきます

実現したいこと

はてなブックマークの人気記事9件とそのブックマーク数を出力したいと考えています
現状は人気記事1件(ホームページ最後の記事)とそのブックマーク数しか出力できていません

発生している問題・エラーメッセージ

エラーメッセージはありません

該当のソースコード

python3

1import requests 2from bs4 import BeautifulSoup 3 4url = "https://b.hatena.ne.jp/" 5 6response = requests. get(url) 7soup = BeautifulSoup(response.content,"html.parser") 8 9top_entry = soup.find("section", attrs ={"class": "entrylist-unit"}) 10entries = top_entry. find_all("div", attrs ={"class": "entrylist-contents"}) 11 12for entry in entries: 13 title_tag = entry.find("h3", attrs ={"class": "entrylist-contents-title"}) 14 title = title_tag.find("a"). get("title") 15 users_tag = entry.find("span", attrs ={"class": "entrylist-contents-users"}) 16 users = users_tag.get_text().strip() 17 18print(title) 19print(users)

試したこと

for entry in entries:以降の記述に誤りがあると考えていろいろ調べているのですが解決できませんでした

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

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

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

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

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

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

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

meg_

2022/09/18 12:37

「過剰アクセスに関する注意事項」には、 ・はてなブックマークの HTML コンテンツを自動巡回ツール、ダウンロードツールなどで取得することはお控えください。 ・はてなブックマークに投稿されたデータを取得されたい場合は、はてなブックマークが提供している RSSフィードあるいは API をお使いください。 とありますので、スクレイピングは推奨されない行為に当たるかと思われます。
guest

回答1

0

ベストアンサー

タイトル、ブックマーク数を対応させて出力したいと考えています

以下は辞書(dict)のリストとして出力する方法です。

python

1import requests 2from bs4 import BeautifulSoup 3from pprint import pprint 4 5url = "https://b.hatena.ne.jp/" 6 7response = requests. get(url) 8soup = BeautifulSoup(response.content,"html.parser") 9 10top_entry = soup.find("section", attrs ={"class": "entrylist-unit"}) 11entries = top_entry.find_all("div", attrs ={"class": "entrylist-contents"}) 12 13contents = [] 14for entry in entries: 15 title_tag = entry.find("h3", attrs ={"class": "entrylist-contents-title"}) 16 title = title_tag.find("a").get("title") 17 users_tag = entry.find("span", attrs ={"class": "entrylist-contents-users"}) 18 users = users_tag.get_text().strip() 19 contents.append({'title': title, 'users': users}) 20 21pprint(contents) 22 23# 24[{'title': '日本人が「実写版リトル・マーメイド」を批判するなぜ、「白人のアリエル」を求めるのは人種差別なのか(東洋経済オンライン) - ' 25 'Yahoo!ニュース', 26 'users': '353 users'}, 27 {'title': '岸田内閣支持29%\u30007ポイント減、3割割る\u3000毎日新聞世論調査 | 毎日新聞', 28 'users': '185 users'}, 29 {'title': '有志と #ソフトウェアテスト読書マップ を作りました! - ソフトウェアの品質を学びまくる2.0', 30 'users': '300 users'}, 31 {'title': '22/9/17 小二で全国模試一位を取った男の半生 - LWのサイゼリヤ', 'users': '365 users'}, 32 {'title': 'NHK「歌舞伎町メンズコンカフェ」特集でみる未成年が身を持ち崩すリアル…依存して金使ってパパ活する地獄ループも', 33 'users': '455 users'}, 34 {'title': '「規制の結果、日本はドローン後進国になった。3Dプリンターも…」~新技術・新アイデアと「規制」についての議論', 35 'users': '319 users'}, 36 {'title': '「してほしい」だけじゃない\u3000漢字で書けるのに仮名にする言葉', 'users': '234 users'}, 37 {'title': '“カワイイ靴はなぜこんなに履きにくいのか”素敵なヒール履いてる人の心の声→ハイヒールの本来の用途とは', 38 'users': '215 users'}, 39 {'title': '堀江貴文氏が〝最強台風〟報道に持論「必要以上に煽る」「三連休の売り上げ失う」(東スポWeb) - Yahoo!ニュース', 40 'users': '233 users'}]

投稿2022/09/18 10:22

編集2022/09/18 12:09
melian

総合スコア19803

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

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

kkmoto

2022/09/18 11:34

回答ありがとうございます。.append()で要素を追加していくのですね 少し気になったのですが title, users = [], []のリストを用意しないまま.append()を使うとタイトルが2重に出力されるのですがなぜこのような挙動を示すのでしょうか また、私はタイトル、ブックマーク数を対応させて出力したいと考えています、その場合は他にどのような記述をすればよろしいのでしょうか
melian

2022/09/18 12:04

> title, users = [], []のリストを用意しないまま.append()を使うとタイトルが2重に出力される Jupyter Notebook をお使いではないでしょうか? その場合、おそらく以前の実行結果が title や users 変数に残ったままになっているのだと思います。 > 私はタイトル、ブックマーク数を対応させて出力したい 辞書を使う方法が考えられます。後程、回答に追記します。
kkmoto

2022/09/18 13:19

jupyter notebookを使用しています 回答追記ありがとうございました、非常に勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問