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

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

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

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3305閲覧

[python]順番にスクレイピングしたい

Dadada_c.

総合スコア59

スクレイピング

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/30 07:51

#pythonでのスクレイピング
初歩的な質問ですみません…。
inputで数値を取り、その数値に+1してURLを生成して順番にスクレイピングしたいです。
が…。。同じURLばかり取得してしまいます。。
凡ミスだとは理解しているのですがいっこうに解決せずやむを得ずご質問させて頂きました。
何卒宜しくお願い致します。。

python

1import urllib.request, urllib.error 2import csv 3from bs4 import BeautifulSoup 4from time import sleep 5 6if __name__ == '__main__': 7 N = input('PLEASE ENTER PAGENATIONS:') 8 pagenation = int(N) 9 url = input('PLEASE ENTER URL:')#https://www.superdelivery.com/p/do/dpsl/78344/ 10 BT = 2 11 12 for i in range(1,pagenation+1): #元for i in range(N) 13 14 sleep(BT)#アクセスが多くなりすぎないように時間を開ける 15 #pの値をfor文で変える 16 17 url_k = url + str(i).strip() 18 print(url_k) 19 20 html = urllib.request.urlopen(url_k).read() 21 soup = BeautifulSoup(html, 'lxml') 22 title = soup.findAll('div' , class_='item-name') 23 a_url = soup.findAll('div' , class_='item-name') 24 25 for f in a_url: 26 for link in f.findAll('a'): 27 28 all_link = 'https://www.superdelivery.com' + link.attrs['href'] 29 30 with open('sd.txt' , 'a') as f: 31 writer = csv.writer(f,lineterminator='\n') 32 writer.writerow([all_link]) 33

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんな感じでしょうか?

python

1import csv 2import time 3import urllib 4 5from bs4 import BeautifulSoup 6 7url_prefix = 'https://www.superdelivery.com/p/do/dpsl/78344/' # 取得先URL 8num_pages = 5 # 取得ページ数 9request_interval = 1 # ページ取得間隔 10 11item_list = [] 12for i in range(1, num_pages + 1): 13 url = urllib.parse.urljoin(url_prefix, str(i)) 14 print('getting page... ', url) 15 16 html = urllib.request.urlopen(url).read() 17 soup = BeautifulSoup(html, 'lxml') 18 # 自分の環境では、lxml が使えなかったので、以下の 'html.parser' を使いました。 19 # soup = BeautifulSoup(html, 'html.parser') 20 a_elems = soup.select('div.item-name > a') 21 22 for a_elem in a_elems: 23 item_url = urllib.parse.urljoin('https://www.superdelivery.com', a_elem.get('href')) 24 item_title = a_elem.string.strip() 25 item_list.append([item_title, item_url]) 26 27 time.sleep(request_interval) # ページ取得間隔を調整する。 28 29print(item_list[0]) 30# '巻き爪ケアテープ<巻き爪シール\u3000ケア>', 'https://www.superdelivery.com/p/r/pd_p/3660784/'] 31 32with open('item_list.csv', 'w', encoding='utf-8') as f: 33 writer = csv.writer(f) 34 writer.writerow(['商品名', 'URL']) # ヘッダーを書き込む。 35 writer.writerows(item_list) # データを書き込む。 36

CSV の中身

商品名,URL 巻き爪ケアテープ<巻き爪シール ケア>,https://www.superdelivery.com/p/r/pd_p/3660784/ 使い捨てお掃除手袋 20枚入 <Disposable cleaning glove mop>,https://www.superdelivery.com/p/r/pd_p/5861647/ 消しゴム型コゲ落とし<BURNT STAIN ERASER>,https://www.superdelivery.com/p/r/pd_p/6277645/ お直し不要 <Size Adjuster>,https://www.superdelivery.com/p/r/pd_p/5411289/ ジェット水流でラクラク風呂掃除 <washer shower head>,https://www.superdelivery.com/p/r/pd_p/4685936/ 排水管とまってキレイ 4錠入BP,https://www.superdelivery.com/p/r/pd_p/5645044/ ゴキよけゲル<害虫 虫よけ>,https://www.superdelivery.com/p/r/pd_p/4208287/ 洗濯槽カビおちーる NEO ドラム式専用,https://www.superdelivery.com/p/r ...

投稿2018/09/30 09:23

tiitoi

総合スコア21954

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

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

Dadada_c.

2018/10/02 21:26

ありがとうございました!うまくいきました! 今まで僕がやっていたやり方よりきれいでとても勉強になりました! これからも励んでいきたいと思いますのでまたご指導お願いします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問