回答編集履歴

2

2018/10/15 11:06

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -30,11 +30,13 @@
30
30
 
31
31
 
32
32
 
33
+ # URL から HTML を取得する。
34
+
33
35
  resp = web.get(url)
34
36
 
37
+ # HTML から BeautifulSoup オブジェクトを作成する。
38
+
35
39
  soup = BeautifulSoup(resp.text, "html.parser")
36
-
37
- print(resp.text)
38
40
 
39
41
 
40
42
 
@@ -42,29 +44,47 @@
42
44
 
43
45
  # URL、タイトル、説明を取得する。
44
46
 
47
+ # <div class="g"> のタグ一覧を取得する。
48
+
45
49
  for div_elems in soup.select('div.g'):
50
+
51
+ # class="r" のタグ配下の a タグを取得する。
46
52
 
47
53
  a_elem = div_elems.select('.r > a')
48
54
 
55
+ # class="s" のタグ配下の class="st" のタグを取得する。
56
+
49
57
  div_elem = div_elems.select('.s > .st')
58
+
59
+ # 両方存在しない場合があったので、その場合はスキップする。
50
60
 
51
61
  if not a_elem or not div_elem:
52
62
 
53
63
  continue
54
64
 
65
+ # select() は選択された要素が1つでもリストで返すので、1個目の要素を取り出す。
66
+
55
67
  a_elem, div_elem = a_elem[0], div_elem[0]
56
68
 
57
69
 
58
70
 
71
+ # a_elem タグの href 属性を取得し、'/url?q=' を削除する。
72
+
59
73
  url = a_elem.get('href').replace('/url?q=', '')
74
+
75
+ # ドメイン部分までを取得する。
60
76
 
61
77
  url_prefix = '{0.scheme}://{0.netloc}/'.format(urlparse(url))
62
78
 
79
+ # a タグのテキストを取得する。
80
+
63
81
  title = a_elem.text
82
+
83
+ # 説明文を取得する。改行コードは削除する。
64
84
 
65
85
  description = div_elem.text.replace('\n','').replace('\r','')
66
86
 
67
-
87
+ # ドメイン部分までの URL、タイトル、説明をリストに追加する。
68
88
 
69
89
  results.append([url_prefix, title, description])
70
90
 
@@ -76,6 +96,8 @@
76
96
 
77
97
  results = []
78
98
 
99
+ # キーワード分検索を実行する。
100
+
79
101
  for keywords in keyword_sets:
80
102
 
81
103
  results.extend(google(keywords))
@@ -84,12 +106,14 @@
84
106
 
85
107
 
86
108
 
109
+ # CSV に書き込む。
110
+
87
111
  with open('output.csv', 'w', encoding='utf8') as f:
88
112
 
89
113
  writer = csv.writer(f)
90
114
 
91
- writer.writerow(['タイトル・説明','URL'])
115
+ writer.writerow(['タイトル・説明','URL']) # ヘッダーを書き込む。
92
116
 
93
- writer.writerows(results)
117
+ writer.writerows(results) # データを書き込む。
94
118
 
95
119
  ```

1

a

2018/10/15 11:06

投稿

tiitoi
tiitoi

スコア21956

test CHANGED
@@ -18,13 +18,7 @@
18
18
 
19
19
  keyword_sets = [['金属屋根','修理','神奈川'],
20
20
 
21
- ['キーワード1','修','東京'],
21
+ ['瓦屋根','修','東京']]
22
-
23
- ['キーワード2','修理','名古屋'],
24
-
25
- ['キーワード3','修理','福岡'],
26
-
27
- ['キーワード4','修理','北海道']]
28
22
 
29
23
 
30
24
 
@@ -34,7 +28,7 @@
34
28
 
35
29
  print('googling... ', url)
36
30
 
37
-
31
+
38
32
 
39
33
  resp = web.get(url)
40
34
 
@@ -42,7 +36,7 @@
42
36
 
43
37
  print(resp.text)
44
38
 
45
-
39
+
46
40
 
47
41
  results = []
48
42
 
@@ -60,9 +54,9 @@
60
54
 
61
55
  a_elem, div_elem = a_elem[0], div_elem[0]
62
56
 
63
-
64
57
 
58
+
65
- url = a_elem['href'].replace('/url?q=','')
59
+ url = a_elem.get('href').replace('/url?q=', '')
66
60
 
67
61
  url_prefix = '{0.scheme}://{0.netloc}/'.format(urlparse(url))
68
62
 
@@ -70,7 +64,7 @@
70
64
 
71
65
  description = div_elem.text.replace('\n','').replace('\r','')
72
66
 
73
-
67
+
74
68
 
75
69
  results.append([url_prefix, title, description])
76
70
 
@@ -84,7 +78,9 @@
84
78
 
85
79
  for keywords in keyword_sets:
86
80
 
87
- results = results.extend(google(keywords))
81
+ results.extend(google(keywords))
82
+
83
+ print(results)
88
84
 
89
85
 
90
86