물질적 자원이 좋아지면서 점차 관광이 주목받고 있습니다. 무더운 국경절이 이제 막 지나가고 있는 요즘, 다들 어디 놀러가는지 궁금해하시는 분들이 많을 것 같아서 이렇게 보냈습니다. 10분 동안 Mafengwo 여행 노트를 수집하는 작은 프로그램을 작성했습니다. 물론 유명한 PHP 크롤러 프레임워크인 phpspider에 전적으로 의존하기 때문에 속도가 매우 빠릅니다.
해외실습, 먼저 코드를 어떻게 작성하는지 살펴보고 이를 출발점으로 생각하자 ^_^
마펑워는 일반 웹사이트와는 동시성이 높기 때문에 사람 수, 좋아요 수 등 일부 데이터는 실시간이어야 하기 때문에 웹사이트는 여러 곳에서 Ajax를 사용하고 있으며 일반 수집가에게는 Ajax가 상대적으로 큰 문제입니다.
마펑워 홈페이지를 관찰하고 최종적으로 수집 경로를 결정했습니다:
인기 도시 가져오기-> 도시 아래의 여행 노트 목록 가져오기-> > 여행 노트 제목, 도시, 출발 시간 등의 내용으로 여행 노트를 추출합니다. 다음으로 이를 달성하기 위해 세 단계를 사용합니다. . .
1. 인기 도시 찾기
먼저 인기 있는 도시를 수집해야 합니다.
페이지 수를 클릭하면 그의 데이터는 Ajax로 Load하며 마지막 페이지는 297이고 POST 방식을 사용합니다
제출된 매개변수는 다음과 같습니다.
분명히 이 페이지에는 문제가 있습니다. phpspider 프레임워크에는 URL이 하나만 있지만 query_string은 POST 데이터에 영향을 주지 않습니다. ?page=1 끝에 |2|3... 코드를 다음과 같이 작성할 수 있습니다.
목록 페이지 규칙 설정:
'list_url_regexes' => array( "http://www.mafengwo.cn/mdd/base/list/pagedata_citylist?page=d+", )
모든 도시 목록 입력 항목 콜백 기능에서:
$spider->on_scan_page = function($page, $content, $phpspider) { // 上面Ajax分页的末页是297页 for ($i = 0; $i $url, 'method' => 'post', 'fields' => array( 'mddid'=>21536, 'page'=>$i, ) ); // 热点城市列表页URL入队列 $phpspider->add_url($url, $options); } };
2. 인기 도시 아래 여행 노트 목록 가져오기
도시를 클릭하면 그 아래에 여행 노트 목록이 표시됩니다
물론 위와 동일하며 Ajax에서도 로드됩니다. Chrome의 개발자 도구를 열고 네트워크를 클릭한 다음 페이지를 클릭하여 Ajax URL을 얻을 수 있습니다. :
도시 목록과 동일하며 POST이며 매개변수는 다음과 같습니다.
분명히 페이지입니다. 물론 페이지 수입니다. POST를 통해 직접 Ajax 주소에 액세스합니다.
http://www.mafengwo .cn/gonglove/ajax.php?act=get_t…
오류를 직접 보고합니다. 위 내용을 바탕으로 코드를 다음과 같이 작성할 수 있습니다.
우선 on_start를 시작해야 합니다. 소스 URL을 추가하세요
$spider->on_start = function($phpspider) { $phpspider->add_header('Referer','http://www.mafengwo.cn/mdd/citylist/21536.html'); };
위의 도시 목록을 얻는 것과 마찬가지로 목록 일치 규칙을 설정합니다:
'list_url_regexes' => array( "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid=d+", )
그런 다음 그것이 on_list_page 콜백의 첫 번째 페이지인지 확인합니다. 그런 다음 대기열에 반복됩니다.
preg_match('#<span class="count">共<span>(.*?)</span>页#', $data_page, $out); for ($i = 0; $i < $out[1]; $i++) { $v = $page['request']['fields']['mddid']; $url = "http://www.mafengwo.cn/gonglve/ajax.php?act=get_travellist&mddid={$v}&page={$i}"; $options = array( 'url_type' => $url, 'method' => 'post', 'fields' => array( 'mddid'=>$v, 'pageid'=>'mdd_index', 'sort'=>1, 'cost'=>0, 'days'=>0, 'month'=>0, 'tagid'=>0, 'page'=>$i, ) ); // 游记列表页URL入队列 $phpspider->add_url($url, $options); }
위의 두 단계를 통해 모든 인기 도시의 여행 메모 목록을 대기열에 넣었습니다. 다음으로 이 단계에서 콘텐츠를 가져옵니다. 목록의 페이지 URL을 선택한 다음 콘텐츠를 추출합니다.
3. 인기 도시의 여행 노트 목록 가져오기
on_list_page 메소드에서는 이 콘텐츠에서 목록 페이지의 콘텐츠를 추출할 수 있습니다. 페이지
// 获取内容页 preg_match_all('#<a href="/i/(.*?).html" target="_blank">#', $html, $out); if (!empty($out[1])) { foreach ($out[1] as $v) { $url = "http://www.mafengwo.cn/i/{$v}.html"; // 内容页URL入队列 $phpspider->add_url($url); } }
다음으로 필드 추출 콘텐츠 페이지 필드를 구성해 보겠습니다.
'fields' => array( // 标题 array( 'name' => "name", 'selector' => "//h1[contains(@class,'headtext')]", 'required' => true, ), // 分类 array( 'name' => "city", 'selector' => "//div[contains(@class,'relation_mdd')]//a", 'required' => true, ), // 出发时间 array( 'name' => "date", 'selector' => "//li[contains(@class,'time')]", 'required' => true, ), )
데이터 테이블 디자인:
Of 물론 여행 노트, 수집, 공유, 고정, 플레이 금액 등의 조회도 얻을 수 있는데 너무 많고 방법도 비슷합니다.
이 시점에서 프로그램이 설계되었으며 총 200줄 미만의 코드로 phpspider의 다중 프로세스 수집 기능 덕분에 총 200줄 이상의 데이터 수집이 빠르게 완료되었습니다. 7W.
이 데이터를 얻은 후에는 무엇을 할 수 있나요? !
10대 관광 도시는
운남성이 좋은 곳임을 알 수 있으며, 블로거들이 밤낮 가리지 않고 그리워하는 곳이기도 합니다. . .
노동절 및 국경일 관광도시 비율
사람들이 노동절에 티베트에 가고 싶어하는 것을 볼 수 있지만, 국경일에는 칭다오가 더 인기가 많습니다. 부자입니다 호스트가 가본적이 없어서 너무 마음이 아프네요~_~!
다음으로 올해 베이징과 항저우의 관광 성수기를 살펴보겠습니다
그래요 7월과 8월에 베이징을 찾는 사람들이 많아지는 것을 볼 수 있습니다. 덥지도 춥지도 않은 이 시기의 베이징이 가장 편안합니다. 블로거는 1년에 8월에 베이징에 갔는데 너무 편했어요 ^_ ^
항저우를 다시 살펴보자
3월 말부터 4월 중순이 항저우를 방문하기에 적합한 계절임을 알 수 있다. 그때는 봄꽃도 피고 날씨도 나쁘지 않은데 프린스 베이 공원에는 매년 벚꽃과 튤립이 핀다고 하더군요~_~!
자, 기사는 여기서 끝입니다. 사실 좀 더 분석하고 싶은데, 예를 들어 인기 노선, 인기 관광지, 인기 포토앨범, 여행 노선 가격 등을 모아서 최종적으로 여행 APP을 구성합니다. 좋은 아이디어 있으시면 알려주시면 나중에 참고하도록 하겠습니다^_^