回答編集履歴

4

追記

2017/09/13 05:45

投稿

aro10
aro10

スコア4106

test CHANGED
@@ -105,3 +105,17 @@
105
105
 
106
106
 
107
107
  ```
108
+
109
+ また質問コードでは、htmlをxmlに変換して処理をしているようですが、DomCrawlerには、filterXPathがありXpathでの抽出も出来ます。
110
+
111
+ GoutteはGuzzleとBrowserKit+DomCrawlerを組み合わせた物なので、以下のドキュメントを見れば出来ることがわかると思います。
112
+
113
+
114
+
115
+ [The BrowserKit Component](https://symfony.com/doc/current/components/browser_kit.html)
116
+
117
+ [The CssSelector Component](https://symfony.com/doc/current/components/css_selector.html)
118
+
119
+ [The DomCrawler Component](https://symfony.com/doc/current/components/dom_crawler.html)
120
+
121
+

3

微追記

2017/09/13 05:45

投稿

aro10
aro10

スコア4106

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  [サンプル追記]
18
18
 
19
- Goutteのsubmitは指定していないform値はそのまま適用してくれているみたいなので、簡易ですがサンプルプログラムを作ってみました。
19
+ Goutteのsubmitは指定していないform値はそのまま適用してくれているみたいなので、簡易ですがページを巡回する形でサンプルプログラムを作ってみました。
20
20
 
21
21
 
22
22
 

2

微追記

2017/09/13 01:07

投稿

aro10
aro10

スコア4106

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
 
10
10
 
11
- あるいはLaravelDuskかPHPWebdriver等でブラウザを操作して行うほうが数倍楽だと思います。
11
+ あるいはLaravelDuskかPHPWebdriver等でブラウザを操作して行うほうが数倍楽だと思います(Jqueryでより柔軟な抽出指定ができるため)
12
12
 
13
13
  [facebook/php-webdriver](https://github.com/facebook/php-webdriver)
14
14
 

1

サンプル追記

2017/09/13 01:02

投稿

aro10
aro10

スコア4106

test CHANGED
@@ -11,3 +11,97 @@
11
11
  あるいはLaravelDuskかPHPWebdriver等でブラウザを操作して行うほうが数倍楽だと思います。
12
12
 
13
13
  [facebook/php-webdriver](https://github.com/facebook/php-webdriver)
14
+
15
+
16
+
17
+ [サンプル追記]
18
+
19
+ Goutteのsubmitは指定していないform値はそのまま適用してくれているみたいなので、簡易ですがサンプルプログラムを作ってみました。
20
+
21
+
22
+
23
+ ### サンプルプログラム
24
+
25
+ ```
26
+
27
+ Artisan::command('test_scrape', function () {
28
+
29
+
30
+
31
+ $startUrl = "https://www.hellowork.go.jp/servicef/130020.do?action=initDisp&screenId=130020";
32
+
33
+ $crawler = \Goutte::request('GET', $startUrl);
34
+
35
+ dump($crawler->getUri());
36
+
37
+ sleep(1);
38
+
39
+ $form = $crawler->selectButton('検索')->form();
40
+
41
+ $crawler = \Goutte::submit($form,['kyujinShurui' => 1, 'shinchakuKyujin' => 1]);
42
+
43
+
44
+
45
+ $this->info("1ページ目");
46
+
47
+ dump($crawler->getUri());
48
+
49
+ sleep(1);
50
+
51
+ $crawler->filter("#ID_mainForm > div:nth-child(26) > div.number-link-top > p:nth-child(1)")->each(function ($node) {
52
+
53
+ dump($node->text());
54
+
55
+ });
56
+
57
+ $form = $crawler->selectButton('次へ>>')->form();
58
+
59
+ $crawler = \Goutte::submit($form,[]);
60
+
61
+
62
+
63
+
64
+
65
+ $this->info("2ページ目");
66
+
67
+ dump($crawler->getUri());
68
+
69
+ sleep(1);
70
+
71
+ $crawler->filter("#ID_mainForm > div:nth-child(26) > div.number-link-top > p:nth-child(1)")->each(function ($node) {
72
+
73
+ dump($node->text());
74
+
75
+ });
76
+
77
+ $form = $crawler->selectButton('次へ>>')->form();
78
+
79
+ $crawler = \Goutte::submit($form,[]);
80
+
81
+ });
82
+
83
+ ```
84
+
85
+
86
+
87
+ ### 出力結果
88
+
89
+ ```
90
+
91
+ "https://www.hellowork.go.jp/servicef/130020.do?action=initDisp&screenId=130020"
92
+
93
+ 1ページ目
94
+
95
+ "https://www.hellowork.go.jp/servicef/130020.do"
96
+
97
+ " 13259 件中 1 ~ 20 件を表示"
98
+
99
+ 2ページ目
100
+
101
+ "https://www.hellowork.go.jp/servicef/130050.do"
102
+
103
+ " 13259 件中 21 ~ 40 件を表示"
104
+
105
+
106
+
107
+ ```