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

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

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

Q&A

解決済

1回答

2079閲覧

【python3 スクレイピング】ページネーションも全て含めて、最下層のURLを取得し、指定した情報を取得したい

退会済みユーザー

退会済みユーザー

総合スコア0

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Python 3.x

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

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

0グッド

0クリップ

投稿2019/06/23 06:37

前提・実現したいこと

python初心者です。
今回、pythonを用いてスクレイピングを実装しようとしたところ、つまづきました。

https://www.judo-ch.jp/sekkotsuinsrch/

上記のサイトの最下層ページ(例:https://www.judo-ch.jp/sekkotsuinsrch/13/13111/030318/)を全て取得し、下記2つの項目を取得したいです。

・会社名(<span class="name"></span>
・URL(<span class="name"></span>

最終的にはcsvファイルに出力します。
(今回の質問は、CSVファイルに出力する前の段階です。)

質問の内容

【機能1】最下層ページの一覧情報が記載されているページの取得
(例:https://www.judo-ch.jp/sekkotsuinsrch/01/list/2/)

【機能2】下層ページ(上記のURL)から最下層ページ情報の取得

それぞれ別のコードで書いた段階では、問題なく動作しました。
しかし、【機能1】と【機能2】を繋ぎ合わせたコードを書いたのですが、何も出力されませんでした。

【機能1】のコード→問題なく動作

jupyter

1from bs4 import BeautifulSoup 2import sys 3import time 4import requests 5import re 6time.sleep(2.0) 7 8num = 2 9i = 1 10r = str(i).zfill(2) 11 12while i < 47: 13 url = 'https://www.judo-ch.jp/sekkotsuinsrch/' + str(r) + '/list/' + str(num) + '/' 14 res = requests.get(url) 15 if res.status_code == 200: 16 print(url) 17 num += 1 18 else: 19 i += 1
【機能2】のコード→問題なく動作

jupyter

1url = 'https://www.judo-ch.jp/sekkotsuinsrch/13/list/2/' 2res = requests.get(url) 3soup = BeautifulSoup(res.text,'lxml') 4links = soup.findAll('a', class_="fa_name") 5for link in links: 6 print(link.get('href'))
【機能1】+【機能2】→何も出力されない

jupyter

1from bs4 import BeautifulSoup 2import sys 3import time 4import requests 5import re 6time.sleep(2.0) 7 8num = 2 9i = 1 10r = str(i).zfill(2) 11 12while i < 47: 13 url = 'https://www.judo-ch.jp/sekkotsuinsrch/' + str(r) + '/list/' + str(num) + '/' 14 res = requests.get(url) 15 if res.status_code == 200: 16 soup = BeautifulSoup(res.text,'lxml') 17 links = soup.findAll('a', class_="fa_name") 18 for link in links: 19 print(link.get('href')) 20 num += 1 21 else: 22 i += 1

また、上記をクリアしたら、最後に【機能3】を追加する予定です。

【機能3】最下層ページから「会社名」と「URL」を取得→問題なく動作

jupyter

1def get_soup(url): 2 """URLのSoupを取得する""" 3 html = requests.get(url) 4 return BeautifulSoup(html.content, "html.parser") 5 6def scraping_gh(): 7 """Software Design の情報を取得""" 8 soup = get_soup("https://www.judo-ch.jp/sekkotsuinsrch/13/13201/030637/") 9 10 # 整骨院の名称 11 res_p = soup.find("span", class_="name") 12 res = res_p.find(text=re.compile("")) 13 print(res.string) 14 # ホームページのURL 15 res_p = soup.find("p", class_="lnk_url") 16 res = res_p.find(text=re.compile("")) 17 print(res.string) 18scraping_gh()

試したこと

while i < 47: → for i in range(47):
とやってみたり、わかる範囲で色々やりましたがダメでした。

【機能1】と【機能2】を組み合わせるフェーズで、どこが間違っているか教えていただけると幸いです。
どうぞ、よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記で解決しました。

python

1import sys 2import requests 3import re 4import urllib.request, urllib.error 5from bs4 import BeautifulSoup 6 7 8i = 1 9num = 2 10while i < 48: 11 for num in range(1, 300): 12 zero_i = str(i).zfill(2) 13 base = 'https://www.judo-ch.jp/sekkotsuinsrch/{}/list/{}/' 14 url = base.format(zero_i,num) 15 res = requests.get(url) 16 if res.status_code == 200: 17 html = requests.get(url) 18 soup = BeautifulSoup(html.content,"html.parser") 19 for tag in soup.find_all("h3","shisetsu_name_s"): 20 link = tag.find("a") 21 url = link.get("href") 22 html = requests.get(url) 23 get_soup = BeautifulSoup(html.content, "html.parser") 24 res_p = get_soup.find("p", "lnk_url") 25 if res_p is not None: 26 print(res_p.text) 27 res_p = get_soup.find("span", "name") 28 if res_p is not None: 29 print(res_p.text) 30 res_p = get_soup.find("dd", "name") 31 if res_p is not None: 32 print(res_p.text) 33 for s_tag in soup.find_all("h3","shisetsu_name"): 34 s_link = s_tag.find("a") 35 s_url = s_link.get("href") 36 html = requests.get(s_url) 37 get_soup = BeautifulSoup(html.content, "html.parser") 38 res_p = get_soup.find("p", "lnk_url") 39 if res_p is not None: 40 print(res_p.text) 41 res_p = get_soup.find("span", "name") 42 if res_p is not None: 43 print(res_p.text) 44 res_p = get_soup.find("dd", "name") 45 if res_p is not None: 46 print(res_p.text) 47 links = soup.find_all("a","fa_name") 48 for link in links: 49 i_url = link.get("href") 50 html = requests.get(i_url) 51 get_soup = BeautifulSoup(html.content, "html.parser") 52 res_p = get_soup.find("p", "lnk_url") 53 if res_p is not None: 54 print(res_p.text) 55 res_p = get_soup.find("span", "name") 56 if res_p is not None: 57 print(res_p.text) 58 res_p = get_soup.find("dd", "name") 59 if res_p is not None: 60 print(res_p.text) 61 else: 62 break 63 num += 1 64 else: 65 break 66 i += 1

投稿2019/06/25 11:18

編集2019/06/25 12:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問