回答編集履歴
4
修正
test
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
|
8
8
|
|
9
|
-
-
|
9
|
+
- `$dom->text()` を呼ぶためだけに phpQuery を入れる意味はありません。 phpQuery は本来PHPネイティブの DOMXPath のような機能を実現するためのものです。
|
10
10
|
|
11
11
|
- (CSSクエリではなくXPathクエリを理解できるのであれば) phpQuery よりも DOMXPath のほうが速い上に余分なコードを書かなくていいので優れています。
|
12
12
|
|
@@ -24,9 +24,19 @@
|
|
24
24
|
|
25
25
|
|
26
26
|
|
27
|
+
$html = file_get_contents('https://e.his-j.com/shop/tour/voyage.aspx?portal=02A&jarea=10&tour=TI-CYC0838');
|
28
|
+
|
29
|
+
|
30
|
+
|
27
31
|
$dom = new DOMDocument;
|
28
32
|
|
33
|
+
@$dom->loadHTML(
|
34
|
+
|
29
|
-
|
35
|
+
mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win'), // 文字化け対応
|
36
|
+
|
37
|
+
LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD
|
38
|
+
|
39
|
+
);
|
30
40
|
|
31
41
|
$xpath = new DOMXPath($dom);
|
32
42
|
|
@@ -63,3 +73,49 @@
|
|
63
73
|
|
64
74
|
|
65
75
|
でどうぞ。
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
# (追記) 正規表現で対応する場合
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
```php
|
84
|
+
|
85
|
+
<?php
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
$html = file_get_contents('https://e.his-j.com/shop/tour/voyage.aspx?portal=02A&jarea=10&tour=TI-CYC0838');
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
// 文字化け対応とテキスト部分のみの抽出
|
94
|
+
|
95
|
+
$dom = new DOMDocument;
|
96
|
+
|
97
|
+
@$dom->loadHTML(
|
98
|
+
|
99
|
+
mb_convert_encoding($html, 'HTML-ENTITIES', 'ASCII,JIS,UTF-8,eucJP-win,SJIS-win'),
|
100
|
+
|
101
|
+
LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD
|
102
|
+
|
103
|
+
);
|
104
|
+
|
105
|
+
$text = $dom->documentElement->nodeValue;
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
if (preg_match('/([\d,]+)\s*円\s*~\s*([\d,]+)\s*円/', $text, $match)) {
|
110
|
+
|
111
|
+
list(, $min, $max) = array_map('intval', str_replace(',', '', $match));
|
112
|
+
|
113
|
+
var_dump($min, $max);
|
114
|
+
|
115
|
+
// int(209800)
|
116
|
+
|
117
|
+
// int(259800)
|
118
|
+
|
119
|
+
}
|
120
|
+
|
121
|
+
```
|
3
修正
test
CHANGED
@@ -2,7 +2,19 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
**「HTMLタグを削ぎ落とすためだけにサードパーティライブラリを
|
5
|
+
**「HTMLタグを削ぎ落とすためだけにサードパーティライブラリを使って,情報量が削ぎ落とされた中から正規表現で抜き出す」**というのはアプローチとして非常にナンセンスです。
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
- HTMLを削ぎ落とすだけならPHP標準関数の `strip_tags` 関数で十分です。 `$dom->text()` を呼ぶためだけに phpQuery を入れる意味はありません。 phpQuery は本来PHPネイティブの DOMXPath のような機能を実現するためのものです。
|
10
|
+
|
11
|
+
- (CSSクエリではなくXPathクエリを理解できるのであれば) phpQuery よりも DOMXPath のほうが速い上に余分なコードを書かなくていいので優れています。
|
12
|
+
|
13
|
+
- HTMLのクラス属性などはスクレイピングのための貴重な情報源なのに,削ぎ落としてしまってテキストしか残っていない状態から正規表現で探し出す,というのは本末転倒です。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
今回の目的であれば `DOMXPath` が適任です。
|
6
18
|
|
7
19
|
|
8
20
|
|
2
修正
test
CHANGED
@@ -38,6 +38,14 @@
|
|
38
38
|
|
39
39
|
list($min, $max) = array_map('intval', explode('〜', str_replace(',', '', $price)));
|
40
40
|
|
41
|
+
|
42
|
+
|
43
|
+
var_dump($min, $max);
|
44
|
+
|
45
|
+
// int(209800)
|
46
|
+
|
47
|
+
// int(259800)
|
48
|
+
|
41
49
|
```
|
42
50
|
|
43
51
|
|
1
intで取得
test
CHANGED
@@ -30,4 +30,16 @@
|
|
30
30
|
|
31
31
|
|
32
32
|
|
33
|
-
これだけ。サードパーティライブラリは一切不要です。
|
33
|
+
これだけ。サードパーティライブラリは一切不要です。もし価格レンジを数値で取得したいのであれば更に
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
```php
|
38
|
+
|
39
|
+
list($min, $max) = array_map('intval', explode('〜', str_replace(',', '', $price)));
|
40
|
+
|
41
|
+
```
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
でどうぞ。
|