teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

コード修正

2021/10/31 03:26

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -77,6 +77,6 @@
77
77
  import pandas as pd
78
78
 
79
79
  # [[shopの社名, shopの住所, shopのTEL], [...], ...]に変換
80
- data = [[shop['name'], shop['address'], shop['tel'] for shop in shops]
80
+ data = [[shop['name'], shop['address'], shop['tel']] for shop in shops]
81
81
  df = pd.DataFrame(data, columns=['社名', '住所', 'TEL'])
82
82
  ```

5

コード修正

2021/10/31 03:26

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -41,7 +41,7 @@
41
41
  address = shop_el.find('p', attrs={'class': 'shop_address'})
42
42
  if address:
43
43
  shop['address'] = address.text
44
- tel = shop_el.find('p', attrs = {'class':'shop_tel'})
44
+ tel = shop_el.find('p', attrs={'class':'shop_tel'})
45
45
  if tel:
46
46
  shop['tel'] = tel.text
47
47
  shops.append(shop)

4

表記修正

2021/10/27 08:12

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -61,9 +61,9 @@
61
61
  shops = flatten([get_shops(url) for url in urls])
62
62
  ```
63
63
 
64
- `get_shops()`では`shop`ごとに`{'name': '...', 'address': '...', 'tel': '...'}`という辞書を作ってその配列を返すようにしています。
64
+ `get_shops()`では`shop`ごとに`{'name': '...', 'address': '...', 'tel': '...'}`という辞書を作ってそのリストを返すようにしています。
65
65
 
66
- `name`/`address`/`tel`それぞれの配列がほしければ以下のようにしましょう。
66
+ `name`/`address`/`tel`それぞれのリストがほしければ以下のようにしましょう。
67
67
 
68
68
  ```python
69
69
  names = [shop['name'] for shop in shops]

3

誤字修正

2021/10/27 08:09

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  2ページ目のURLを見てみると`https://el.e-shops.jp/local/jb/6008/jn/6000523/cn/23109/2.html`のように末尾に`2.html`が付いています。別の区の3ページ目も確認すると末尾が`3.html`でした。
2
2
 
3
- ということは`base_url`を`https://el.e-shops.jp/local/jb/6008/jn/6000523/cn/23109/`とすると、1ページ目は`base_url + '2.html'`、3ページ目は`base_url + '3.html'`……となっているわけです。
3
+ ということは`base_url`を`https://el.e-shops.jp/local/jb/6008/jn/6000523/cn/23109/`とすると、2ページ目は`base_url + '2.html'`、3ページ目は`base_url + '3.html'`……となっているわけです。
4
4
 
5
5
  そして、最後のページの次のページ(例えば`https://el.e-shops.jp/local/jb/6008/jn/6000523/cn/23109/3.html`)を見てみると、`.list-tel-shop`という要素がないページが表示されます。
6
6
 

2

dataframeへの変換を追記

2021/10/27 08:08

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -69,4 +69,14 @@
69
69
  names = [shop['name'] for shop in shops]
70
70
  address = [shop['address'] for shop in shops]
71
71
  tels = [shop['tel'] for shop in shops]
72
+ ```
73
+
74
+ これらを一列づつ追加してもいいですが、一気に`pd.Dataframe`にした方がいい気がします。
75
+
76
+ ```python
77
+ import pandas as pd
78
+
79
+ # [[shopの社名, shopの住所, shopのTEL], [...], ...]に変換
80
+ data = [[shop['name'], shop['address'], shop['tel'] for shop in shops]
81
+ df = pd.DataFrame(data, columns=['社名', '住所', 'TEL'])
72
82
  ```

1

説明とコードを追記

2021/10/27 08:07

投稿

fj68
fj68

スコア752

answer CHANGED
@@ -61,4 +61,12 @@
61
61
  shops = flatten([get_shops(url) for url in urls])
62
62
  ```
63
63
 
64
- `get_shops()`では`shop`ごとに`{'name': '...', 'address': '...', 'tel': '...'}`という辞書を作ってその配列を返すようにしています。
64
+ `get_shops()`では`shop`ごとに`{'name': '...', 'address': '...', 'tel': '...'}`という辞書を作ってその配列を返すようにしています。
65
+
66
+ `name`/`address`/`tel`それぞれの配列がほしければ以下のようにしましょう。
67
+
68
+ ```python
69
+ names = [shop['name'] for shop in shops]
70
+ address = [shop['address'] for shop in shops]
71
+ tels = [shop['tel'] for shop in shops]
72
+ ```