0

我试图通过传递我在 bing 上搜索图像并尝试抓取图像的前 3 个单词来从 rss 提要中抓取图像。我的代码正在运行,但我总是收到端口 9515 已在使用中的错误。我已经添加了代码来终止端口,但它不起作用,请帮帮我。我参考了这个 url 来构建我的代码https://www.thoughtfulcode.com/php-web-scraping/。/请帮帮我。

代码

 include ('vendor/autoload.php');
    
 error_reporting(E_ERROR | E_PARSE);

 $url="https://timesofindia.indiatimes.com/rssfeedstopstories.cms";
 $xml = simplexml_load_file($url);
 $array = json_decode(json_encode($xml), true);
 $description=array();
 $i_size=sizeof($array['channel']['item'])-1;
 for($i=0;$i<sizeof($array['channel']['item']);$i++){
      $title=$array['channel']['item'][$i]['title'];
      $keyword_array=explode(" ",$title);
      $keyword=$keyword_array[0].' '.$keyword_array[1].' '.$keyword_array[2];
      download_feed_image($keyword);
      if($i_size==$i){
       echo "done";
    }
 }


    function download_feed_image($keyword){
       try {
          $client = \Symfony\Component\Panther\Client::createChromeClient();
          $crawler = $client->request('GET', 'https://www.bing.com/images/search?q='.$keyword.'&form=HDRSC2&first=1&cw=1349&ch=657');
          $fullPageHtml = $crawler->html();
          $pageH1 = $crawler->filter('.iusc')->attr('href');
          $img_tag=null;
          parse_str($pageH1,$img_tag);
          $file_name = basename($img_tag['mediaurl']);
          file_put_contents( $file_name,file_get_contents($img_tag['mediaurl']));
        } catch (Exception $e) {
            echo $e->getMessage();
        } finally {
            $client->quit();
        }
        exec("kill -9 $(lsof -t -i:9515)");
 }
4

1 回答 1

1

只需重新启动计算机即可帮助终止 Chrome 浏览器实例,或者如果您使用 Ubuntu 在终端中键入pkill chrome

$client->quit();

浏览器忙且未应答时不起作用:(在退出 Chrome 浏览器之前,您需要删除临时数据

$client->close();
$client->quit();

Ps 你可以在这里查看 Chrome 浏览器状态 http://127.0.0.1:9515/status

于 2020-09-18T08:29:49.337 回答