2009-08-07 7 views
0
$url = 'the web address I want to get the first and second numbers close to $' ; 
$str = file_get_contents($url); 

preg_match_all('/ ([$]) *(\d+(:?.\d+)?)/', $str, $matches, PREG_SET_ORDER); 

$i=0; 
foreach ($matches as $val) { 
    if($i==0) $first=$val[2] ; 
    if($i==3) $second=$val[2] ; 
    $i++;  
} 
$bad_symbols = array(",", "."); $first = str_replace($bad_symbols, "", $first); 
$bad_symbols = array(",", "."); $second = str_replace($bad_symbols, "", $second); 

echo $first . "</br>"; 
echo $second; 

어제까지 제대로 작동했습니다. 무엇이 문제입니까?URL을 스크래핑하는 PHP 코드가 갑자기 작동을 멈췄습니다

+6

file_get_contents ($ url)의 결과를 살펴 보셨습니까? 어쩌면 당신이 긁어 모으고있는 웹 사이트가 뭔가를 바꾸어 놓은 것일 수도 있습니다. – nos

+0

정확한 오류는 무엇입니까? –

+0

그래서 문제가 무엇입니까? 지금 무엇을합니까? – EFraim

답변

0

아마도 시스템 관리자가 allow_url_fopen 지정 문을 변경했기 때문에 서버에없는 파일에 액세스 할 수 없습니다. file_get_contents()가 반환하는 것을 확인하십시오. 오류에 대한 정보는 거의 알려주지 않았기 때문입니다. 위에서 언급 한 바와 같이

또 다른 문제는, 원격 사이트가 변경되었음을 수 :

3

나는 적어도 두 가지 가능한 설명을 참조하십시오

  • 사이트의 HTML이 변경되었습니다; 어쩌면 약간의 문제 일지 모르지만 문제를 일으키기에 충분합니다.
  • 그리고 ... HTML의 내용을 표시 할 수있는 동일하지 pageis - 은
      당신은
    • 이 거짓 인 경우 preg_match_all의 반환 값을 테스트 할 수
    • , 그것은 일치하지 않습니다 당신의 정규식 의미 당신이
  • 정규식에게 서버의 관리자를 수정해야 할 수도 있습니다 (또는이 페이지를 생성하는 코드에서 수행 할 수 있습니다)는
    • 은 아마 웹 사이트를 발견했습니다 금지하고있다 당신에 의해 폐기되었다 (중 당신이 그들의 서버에 너무 열심히 가고 있었다, 또는 귀하의 사이트에 자신의 콘텐츠를 보았 기 때문에)
    • 을 그리고 그들은 그것을 감지하기
    • (예를 들어) 당신의 IP를 금지, 반환 값을 얻을려고 file_get_contents; false이면 문제의 원인이 될 수 있습니다.
    • wget을 명령 줄에서 사용하여 서버에서 HTML 페이지를 가져올 수 있습니까? 다른 사람에 의해 suggestd로
  • 세 번째 하나 :
    • 해결책은 컬을 사용하는 것입니다 ... 어쩌면 서버의 구성이 변경되었습니다, 당신은 더 이상 HTTP를 통해 file_get_content을 사용할 수 없습니다 구성의 예를
    • 확인 allow_url_fopen 지침

에 대한 당신이 활성화하면 error_reporting (,), 유용한 정보를 얻을 수있는 정보를 얻을 수도 있습니다 ...

관련 문제