정규식은 힘들군요
본문
<li id="room-e2f9afe08054da8141c921f3194aaa12" data-trate="2.65" data-prate="2.1" data-nrate="2.55" data-recomcnt="33" data-curuser="26" data-time="1593938049">
<div class="thumb red"><img src="https://sfile.powerballgame.co.kr/profileImg/66f4f115a64a31e4f71c7955b768c6a0.gif?1589995072" class="roomImg"/><div class="winFixCnt">8</div></div>
<이하 생략>....
안녕하세요.
스누피로 크롤링 하는거 해보려고 하는데요..
찾아보면...
preg_match('~<html>[{"(.*?)', $snoopy->results, $text); //preg_match 정규식을 사용해서 필요한 요소만을 추출한다고 합니다. 라고 해요...
예를 들면 이런식..$rex="/\<em class=\"curPrice.+\"\>(.*)\<\/em\>/";
구글링 해봐도 제가 알고 싶은게 없어서요...
예문에 보면../,\ 이런것들이 들어가는데 따로 규칙이 있는건가요? 어느요소에 저걸 작성해야 하는건가요? ^^;; (좀 질문이 이상한뎅)
위 소스 에서 제가 가져오려는 값이
e2f9afe08054da8141c921f3194aaa12
https://sfile.powerballgame.co.kr/profileImg/66f4f115a64a31e4f71c7955b768c6a0.gif?1589995072
8
이렇게 3가지 인데요. 저 3가지 란에 (.*) 를 쓰는거 같고...나머지 부분에는 다 /\ 이런거 다 넣음 되는줄 알았는데...안되 더라구요.
저 3가지 찾고자 하는값을 정규식을 이용해서 추출하면 된다는....모든 구글링의 동일한 답변인데...
어떤 규칙이 필요한건지요...도와주세요~~ㅜㅜ
!-->
답변 3
정규식의 공부는 https://regex101.com/ 여기를 통해서 하시면 됩니다.
우의 예시에 나온 정규식으로 테스트해 보겠습니다.
/\<em class=\"curPrice.+\"\>(.*)\<\/em\>/
이 문장을 regex101.com 에 넣으면 각각에 대한 설명이 나오니 참조하시고
이것에 매칭되는 html이 아래라고 하면
<em class="curPriceApple">100.00</em>
(.*) 이 Group1을 나타내는데.. 가격을 가져 온다고 생각하시면 됩니다.
!-->!-->정규식은 따로 문법이 존재하며 해당 문법에 맞게 작성하시면 되고 복잡하여 그걸 외우고 쓰는 사람은 거의 없습니다.
필요할 때 문서를 보고 작성하는 경우가 대부분입니다.
문법의 경우 인터넷에서 검색만 해도 쉽게 나옵니다.
스누피라는 것을 써 본적은 없습니다만,
길고 긴 HTML 문자열에서 정규식만으로 찾아낸다는 것이 쉬운 일은 아닌 것 같아서요.
스크래핑(요즘엔 웹크롤링이라고도 하지만)기술이라는 것이
길고 긴 문자열에서 원하는 것만 찝어내는것이고,
파이선의 뷰티플숲과 같은 PHP 라이브러리를 찾는 것은 어떨런지요.
php web scraping selector ==> 이렇게 구글링을 하였고...
https://dev.to/sayopaul/web-scraping-in-php-using-goutte--4p6h
이런 블로그가 나오네요...
$crawler = $crawler->filter('body > p');
이렇게 selector를 이용하여 찾아낸다면 더 정확한 값을 찾으실 수 있지 않을까요?
저라면... 정규식으로 안하고 selector로 할 것 같아서 답변 남겨봅니다.
https://github.com/FriendsOfPHP/Goutte
음... 괜찬은 라이브러리인듯요... 더 구글링해보면 더 좋은 것들도 있겠죠?
(해보진 않았어요~~~)