-ださろぐシステム開発者からコーヒー屋への道。2016phpでスクレイピングといえばGoutte(特に内部で使用しているCssSelector)がちょう便利ですが、とはいえスクレイピング対象のページに都合よくidやclassが振られていなこともままありますね。今回たまたま某生協の注文サイトから注文状況を取得した際にやったあれこれをいくつかメモ。パラメータを書き換えてpostpostして遷移するページで、post直前にjsで値を書き換えてからpost、という動作をしている所があった。細かくコードを追うのは面倒なので、実際にpostされた値に合わせる形でページから値をかき集めてsubmitさせる。書き換えはsetValues、formからの値の取得はgetValuesで。「前回の注文情報」というのを取るにあたり、同じURLでpostされたパラメータによって画面遷移するという箇所があったため、「一度現在の注文ページを開き、option要素がselectedになってる要素の次の要素を選択」という条件で取得してみた。optionの場所が固定なら$crawler->eq(n)で取れるのだが可変なので、順序が保証されているという前提でこんな感じに対応。previousAllが毎回呼ばれるのがイマイチ感がありますがまあこんな感じで。一個前の取得はpreviousAll->last()ではなくfirst()でとれた。余計な要素を除外テーブルからのデータ取得で、よけいなtr(デザイン上の隙間的な何か)を除外。reduceで頑張る。後続処理reduceやeachで無名関数を渡すときはuseで外部変数も渡せるのでなかなかベンリですね。'echo(urldecode(file_get_contents("php://stdin")));'=file_get_contents(“php://stdin”)で標準入力を受け取れるのでこんな感じで。