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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

2068閲覧

python3 / beautifulsoup / 特定サイト内スクレイピングにおける対象ページ設定

sadie

総合スコア18

スクレイピング

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

Python 3.x

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

0グッド

0クリップ

投稿2018/10/23 02:53

編集2018/10/23 03:44

特定サイト(iタウンページ)の検索結果をスクレイピングで収集したいです
「指定したページ」の結果を全て収集できるようにしたいのですが、本コードをどのように変更することで成せましょうでしょうか?

python3

1import time 2import csv 3import re 4import requests 5import bs4 6 7# 5ページ分だけ取得して、配列に保持する。 8base_url = 'https://itp.ne.jp/genre_dir/syaken/pg/{page_no}/' 9urls = [base_url.format(page_no=i) for i in range(100)] 10print(urls) 11 12# 配列を一個づつ回して、htmlを解析して、メールアドレスだけ取得 13addrs = [] 14for url in urls: 15 print('fetching... ' + url) 16 res = requests.get(url) 17 soup = bs4.BeautifulSoup(res.text, 'html.parser') 18 for a_tag in soup.find_all('a', class_='boxedLink emailLink'): 19 match = re.search(r'[\w.-]+@[\w.-]+', a_tag['onclick']) 20 addrs.append([match.group(0)]) 21 22 time.sleep(1) # アクセス間隔 23print(addrs) 24 25with open('test.csv', 'w', encoding='utf8') as f: 26 writer = csv.writer(f) 27 writer.writerows(addrs)

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

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

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

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

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

tiitoi

2018/10/23 03:35 編集

「指定したページ」の結果とは具体的にはどのような情報がほしいのでしょうか?現状のコードの問題点も追記してください。 あとタイトルに入っている Google はこの件では関係ありませんよね。
sadie

2018/10/23 03:43

titoisさん、いつもありがとうございます。googleは間違いです、すみません。https://itp.ne.jp/genre_dir/syaken/?ngr=1&sr=1 この検索結果にある事業者のアドレスをスクレイピングしていて、この検索結果のページを「1から50ページまで」「20から50ページまで」というように任意に指定したく考えています
guest

回答1

0

ベストアンサー

既存のコードの [base_url.format(page_no=i) for i in range(100)] の部分を変えればいいかと思います。

サンプルコードを以下に貼ります。

python

1import time 2import csv 3import re 4import requests 5import bs4 6 7# 取得ページ分だけURLを生成して、配列に保持する。 8begin = 5 # 取得開始ページ 9end = 10 # 取得終了ページ 10base_url = 'https://itp.ne.jp/genre_dir/syaken/pg/{page_no}/' 11urls = [base_url.format(page_no=i) for i in range(begin, end)] 12print(urls) 13 14# 配列を一個づつ回して、htmlを解析して、メールアドレスだけ取得 15addrs = [] 16for url in urls: 17 print('fetching... ' + url) 18 res = requests.get(url) 19 soup = bs4.BeautifulSoup(res.text, 'html.parser') 20 for a_tag in soup.find_all('a', class_='boxedLink emailLink'): 21 match = re.search(r'[\w.-]+@[\w.-]+', a_tag['onclick']) 22 if match: 23 addrs.append([match.group(0)]) 24 25 time.sleep(1) # アクセス間隔 26print(addrs) 27 28with open('test.csv', 'w', encoding='utf8') as f: 29 writer = csv.writer(f) 30 writer.writerows(addrs)

投稿2018/10/23 03:49

tiitoi

総合スコア21956

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

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

sadie

2018/10/23 04:44

ありがとうございます いつもありがとうございます titoiさんにいつもご教授いただいていますが、今後直接個別回答依頼にてお伺いをしたほうがよろしいでしょうか?
tiitoi

2018/10/23 05:08 編集

たまたま回答できる質問を見かけたら、回答しているだけなので、個別依頼でなく普通の質問で大丈夫ですよ。 いつも回答できるとは限らないので。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問