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

回答編集履歴

4

修正

2016/09/20 13:12

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -13,10 +13,10 @@
13
13
  $divs = $xpath->query('//div[@class="text"]'); // classがtextの<div>を探す
14
14
  foreach($divs as $div) { // 見つかった<div>が配列になっているのでループで回す
15
15
  $en_divs = $xpath->query('div[@class="en_text"]', $div); // そのdivからclassがen_textの<div>を探す
16
- if(!empty($en_divs[0])) {
16
+ if($en_divs->length) { // divがあったら
17
- $div->removeChild($en_divs[0]); // en_textのdivを消す
17
+ $div->removeChild($en_divs->item(0)); // en_textのdivを消す
18
18
  }
19
- echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する
19
+ echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する
20
20
  }
21
21
  ```
22
22
 

3

さらに修正

2016/09/20 13:12

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -13,7 +13,7 @@
13
13
  $divs = $xpath->query('//div[@class="text"]'); // classがtextの<div>を探す
14
14
  foreach($divs as $div) { // 見つかった<div>が配列になっているのでループで回す
15
15
  $en_divs = $xpath->query('div[@class="en_text"]', $div); // そのdivからclassがen_textの<div>を探す
16
- if($en_divs->length) { // divがあったら
16
+ if(!empty($en_divs[0])) {
17
17
  $div->removeChild($en_divs[0]); // en_textのdivを消す
18
18
  }
19
19
  echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する

2

凡ミス修正

2016/09/20 13:05

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -17,6 +17,7 @@
17
17
  $div->removeChild($en_divs[0]); // en_textのdivを消す
18
18
  }
19
19
  echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する
20
+ }
20
21
  ```
21
22
 
22
23
  DomDocumentを使うと、HTMLを構造解析して、XPathでほしい情報を抽出できます。詳しくは、[ここ](http://php-archive.net/php/dom-scraping/)を読んで下さい。多くの場合、正規表現より正確かつ簡単に抽出できます。

1

修正

2016/09/20 13:00

投稿

popobot
popobot

スコア6588

answer CHANGED
@@ -10,10 +10,13 @@
10
10
  $dom = new DomDocument; // DomDocumentオブジェクトを作る
11
11
  @$dom->loadHTML($html); // ターゲットのHTMLをDomDocumentに読み込ませる
12
12
  $xpath = new DOMXPath($dom); // XPathオブジェクトを作る
13
- $divs = $xpath->query('//div[@class="en_text"]'); // classがen_textの<div>を探す
13
+ $divs = $xpath->query('//div[@class="text"]'); // classがtextの<div>を探す
14
14
  foreach($divs as $div) { // 見つかった<div>が配列になっているのでループで回す
15
+ $en_divs = $xpath->query('div[@class="en_text"]', $div); // そのdivからclassがen_textの<div>を探す
16
+ if($en_divs->length) { // divがあったら
17
+ $div->removeChild($en_divs[0]); // en_textのdivを消す
18
+ }
15
- echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する
19
+ echo $div->nodeValue ."\n"; // <div>内の値をechoで出力する
16
- }
17
20
  ```
18
21
 
19
22
  DomDocumentを使うと、HTMLを構造解析して、XPathでほしい情報を抽出できます。詳しくは、[ここ](http://php-archive.net/php/dom-scraping/)を読んで下さい。多くの場合、正規表現より正確かつ簡単に抽出できます。