(編集:私はまだこの問題を解決する方法を見つけていません。$crawler
オブジェクトを扱うのはばかげているようです。特定のテキストを解析したいだけです。それ<td>
はどれほど難しいですか?serialize()
クローラーオブジェクト全体を作成することもできません。ウェブページのソースコードを文字列に変換するか、そうでなければ私はその文字列を難しい方法で解析することができました.助けてください.私は問題をうまく説明したと思います, 以下.)
以下では、Symfony、Goutte、および DomCrawler を使用して Web ページをスクレイピングしています。私は成功しなかった他の質問を通してそれを理解しようとしてきましたが、今はすべてのコードを投稿して、これをできるだけ簡単にするつもりです.
ページを取得して、探しているデータの最初のビットを取得できます。1 つ目は、javascript から出力された URL であり、and の付いたa
タグ内にonclick
あり、長い文字列です。そのため、a を使用しpreg_match
てふるいにかけ、必要なものを正確に取得します。
次に必要なデータは、<td>
タグ内のテキストです。問題は、この Web ページには 10 ~ 20 の異なる<table>
タグがあり、id=""
またはclass=""
タグがないため、分離するのが難しいということです。だから私がやろうとしているのは、「Event Title」という単語を検索してから、次の兄弟<td>
タグに移動し、その innerHtml を抽出することです。これが実際のタイトルになります。
$crawler
問題は、2 番目の部分では、オブジェクトを正しく解析できないように見えることです。オブジェクトのバージョンでpreg_match
以前に行ったことがわかりませんが、下半分については適切に解析できないようです。serialize()
$crawler
$crawler = $client->request('GET', 'https://movies.randomjunk.com/events/EventServlet?ab=mov&eventId=154367');
$aurl = 'http://movies.randomjunk.com/r.htm?e=154367'; // event url beginning string
$gas = $overview->filter('a[onclick*="' . $aurl . '"]');
$string1 = serialize($gas->filter('a')->attr('onclick')); //TEST
$string1M = preg_match("/(?<=\')(.*?)(?=\')/", $string1, $finalURL);
$aString = $finalURL[0];
echo "<br><br>" . $aString . "<br><br>";
// IT WORKS UP TO HERE
// $title = $crawler->filterXPath('//td[. = "Event Title"]/following-sibling::td[1]')->each(funtion (Crawler $crawler, $i) {
// return $node->text();
// }); // No clue why, but this doesn't work.
$html = $overview->getNode(0)->ownerDocument->saveHTML();
$re = "/>Event\sTitle.*?<\\/td>.*?<td>\\K.*?(?=<\\/td>)/s";
$str = serialize($html);
print_r($str);
preg_match_all($re, $str, $matches);
$gas2 = $matches[0];
echo "<pre>";
print_r($gas2);
echo "</pre>";
Mypreg_match
は空の配列を返します。$crawler
オブジェクトは多くのノードで構成されているため、オブジェクトの検索に問題があると思います。私はそれをすべてhtmlに変換してからaに変換しようとしましたが、うまくいきませんpreg_match
。いくつかのprint_r
ステートメントを実行しましたが、Web ページ全体が返されるだけです。
クローラー オブジェクトの一部の html の例を次に示します。
{lots of other html and tables}
<table>
<tr>
<td>Title</td>
<td>The Harsh Face of Mother Nature</td>
<td>The Harsh Face of Mother Nature</td>
</tr>
.
.
</table>
{lots of other html and tables}
そして、目標は、ページ/オブジェクト全体を解析し、「母なる自然の厳しい顔」$crawler
というタイトルを取得することです。
これが可能であることはわかっていますが、誰かが提供したい唯一の答えは、この時点で約 1000 回読んだ domcrawler ページへのリンクです。助けてください。