php 使用 selenium 爬取數據

	## 本文章为自己写的实例,仅供参考,如需转载请标明出处。
	## 如果想知道更多方法,请参考文档(翻译过的不完全版):[php selenium文档](https://www.kancloud.cn/wangking/selenium/234534)

1.下载Selenium Serve:
下載地址:http://www.seleniumhq.org/download,也可以自己百度下載
下載完成后將壓縮包放入項目目錄

2.通过composer安装Selenium(可能需要翻墻):
composer require facebook/webdriver

3. 打開CMD,進入压缩包所在文件夾,执行命令开启Selenium Serve(該操作需要JAVA支持,如果未安裝JAVA請自行安裝)
java -jar selenium-server-standalone-2.42.2.jar

4. 代碼示例:

<?php

    // 引入Class
    namespace Facebook\WebDriver;
    use Facebook\WebDriver\Remote\DesiredCapabilities;
    use Facebook\WebDriver\Remote\RemoteWebDriver;
    require_once('vendor/autoload.php');

    // 設置字符集
    header("Content-Type: text/html; charset=UTF-8");
    $host = 'http://localhost:4444/wd/hub'; // this is the default

    $capabilities = DesiredCapabilities::chrome();
    $driver = RemoteWebDriver::create($host, $capabilities, 5000);
    // navigate to 'http://docs.seleniumhq.org/'
    $driver->get('http://quote.eastmoney.com/sz000001.html');

    // 獲取網站標題
    echo $driver->getTitle();
    
    //关闭浏览器
    $driver->quit();

?>

5. 代码示例(爬取列表中的数据代码):

    	// 引入Class
    	namespace Facebook\WebDriver;
    	use Facebook\WebDriver\Remote\DesiredCapabilities;
    	use Facebook\WebDriver\Remote\RemoteWebDriver;
    	require_once('vendor/autoload.php');
    
	    // 設置配置、参数
	    set_time_limit(0);
    	header("Content-Type: text/html; charset=UTF-8");
		$sharesCode = '000001';
	    $host = 'http://localhost:4444/wd/hub';
	    $capabilities = DesiredCapabilities::chrome();
	    $driver = RemoteWebDriver::create($host, $capabilities, 5000);

		// 判断股票所属地区
        if( in_array($sharesCode[0], array(0,3)) ){
            $areaCode = 'sz';
        }else{
            $areaCode = 'sh';
        }

		// 创建连接
	    $driver->get('http://quote.eastmoney.com/changes/stocks/'. $areaCode . $sharesCode .'.html');
	    // 判断元素是否存在,此处视情况添加,因为找不到元素会报错
        if(!isElementExsit($driver, WebDriverBy::cssSelector('strong.xp1'))){
        	echo '未找到元素';
		    $driver->quit();
        	return false;
		}

        // 獲取股票单价
        $element = $driver->findElement(WebDriverBy::cssSelector("strong.xp1"));
        $xp1 = $element->getText();

        // 獲取股票總市值
        $element = $driver->findElement(WebDriverBy::cssSelector("td#zsz"));
        $zsz = $element->getText();

		// 获取股票统计列表数据
        $driver->get("http://data.eastmoney.com/bbsj/stock{$sharesCode}/yjbb.html");
        $element = $driver->findElements(WebDriverBy::cssSelector("#dt_1>tbody>tr>td"));

		// 因为每行有12列,所以循环12次为一行保存
        $line = 0;
        $sharesInfo = array();
        $allSharesInfo = array();
        foreach ($element as $k => $v) {

            $sharesInfo[] = $v->getText();
            if( ($k+1) % 17 == 0 ){
                $allSharesInfo['list'][] = str_replace( array("\n", "\r", "\r\n", "<br>"), '-', $sharesInfo);

                $sharesInfo = array();
                $line++;
                if( $line >= 12 ){
	                $allSharesInfo['zsz'] = $zsz;
	                $allSharesInfo['xp1'] = $xp1;
	    			file_put_contents("shares_info/{$sharesCode}.txt", json_encode($allSharesInfo)."\r\n");
				    //关闭浏览器
				    $driver->quit();
			        return $allSharesInfo;

			        unset( $allSharesInfo );
                    break;
                }
            }
        }

翻页实例,以及有些网站做的防爬虫,数据编码等问题没有在这里编写,如果有需要可以留言或者私信,希望本文章能对你有所帮助

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值