返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP 实现网页爬虫
  • 680
分享到

PHP 实现网页爬虫

爬虫php开发语言 2023-09-10 07:09:33 680人浏览 八月长安
摘要

方法一 通过fopen和stream_get_contents获取html内容 从给定的url获取html内容 function _getUrlContent($url) { //fopen() 函数打开一个文件

方法一

通过fopen和stream_get_contents获取html内容

从给定的url获取html内容

    function _getUrlContent($url)    {        //fopen() 函数打开一个文件或 URL。        $handle = fopen($url, "r");        // var_dump($handle);die;        if ($handle) {            //官方是这样描述的与 stream_get_contents();file_get_contents() 一样,但是 stream_get_contents() 是对一个已经打开的资源流进行操作,并将其内容写入一个字符串返回            $content = stream_get_contents($handle, 1024 * 1024);            return $content;        } else {            return false;        }    }

从html内容中筛选链接。爬取信息,可直接调用

    function _filterUrl($WEB_content)    {        $tag = 'div';        $attr = '';        $value = '';        //自定义正则表达式        $reg_tag_a = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\/$tag>/is";        //获取页面所有链接的正则表达式        //$reg_tag_a = "/<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>/";        //preg_match_all 函数用于执行一个全局正则表达式匹配。//参数一:$pattern: 要搜索的模式,字符串形式。//参数二:$subject: 输入字符串。//参数三:$matches: 多维数组,作为输出参数输出所有匹配结果, 数组排序通过flags指定。//参数四:$flags:匹配模式,默认PREG_PATTERN_ORDER        $result = preg_match_all($reg_tag_a, $web_content, $match_result);        if ($result) {        //匹配结果            return $match_result[1];        }    }

修正相对路径,(可不使用)

    function _reviseUrl($base_url, $url_list)    {        $url_info = parse_url($base_url);        // var_dump($url_info);die;        $base_url = $url_info["scheme"] . '://';        if (isset($url_info["user"]) && isset($url_info["pass"])) {            $base_url .= $url_info["user"] . ":" . $url_info["pass"] . "@";        }        $base_url .= $url_info["host"];        if (isset($url_info["port"])) {            $base_url .= ":" . $url_info["port"];        }        $base_url .= $url_info["path"];        // print_r($url_list);        if (is_array($url_list)) {            foreach ($url_list as $url_item) {                if (preg_match('/^Http/', $url_item)) {                    // 已经是完整的url                    $result[] = $url_item;                } else {                    // 不完整的url                    $real_url = $base_url . '/' . $url_item;                    $result[] = $real_url;                }            }            return $result;        } else {            return;        }    }

修正链接,可不调用,直接调用_filterUrl

    function crawler($url)    {        // $url = g('url') ?? '';        $content = $this->_getUrlContent($url);        // var_dump($content);die;        if ($content) {            $url_list = $this->_reviseUrl($url, $this->_filterUrl($content));            // var_dump($url_list);die;            if ($url_list) {                return $url_list;            } else {                return;            }        } else {            return;        }    }

测试用主程序,往文件里写入爬虫信息

    public function main()    {        $current_url = "https://www.sina.com.cn/"; //初始url        $fp_puts = fopen("url3.txt", "ab"); //记录url列表        $fp_gets = fopen("url3.txt", "r"); //保存url列表        do {            $result_url_arr = $this->crawler($current_url);            // var_dump($result_url_arr);die;            if ($result_url_arr) {                foreach ($result_url_arr as $url) {                    fputs($fp_puts, $url . "\r\n");                }            }        } while ($current_url = fgets($fp_gets, 1024)); //不断获得url    }

方法二

使用curl获取html页面内容

使用curl获取html页面内容

    function curlHtml($url)    {        $curl = curl_init();        curl_setopt_array($curl, array(            CURLOPT_URL            => "{$url}",            CURLOPT_RETURNTRANSFER => true,            CURLOPT_ENCODING       => "",            CURLOPT_MAXREDIRS      => 10,            CURLOPT_TIMEOUT        => 30,            CURLOPT_HTTP_VERSION   => CURL_HTTP_VERSION_1_1,            CURLOPT_CUSTOMREQUEST  => "GET",            CURLOPT_HTTPHEADER     => array(                "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*    function get_tag_data($html, $tag, $attr, $value)    {        // var_dump($tag, $attr, $value);        $regex = "/<$tag.*?$attr=\".*?$value.*?\".*?>(.*?)<\/$tag>/is";        // var_dump($regex);        preg_match_all($regex, $html, $matches, PREG_PATTERN_ORDER);        var_dump($matches);die;        $data = isset($matches[1]) ? $matches[1] : '';        // var_dump($data);die;        return $data;    }

使用xpath对获取到的html内容进行处理

    function get_html_data($html, $path, $tag = 1, $type = true)    {        $dom = new \DOMDocument();        @$dom->loadHTML("" . $html); // 从一个字符串加载HTML并设置UTF8编码        $dom->normalize(); // 使该HTML规范化        $xpath = new \DOMXPath($dom); //用DOMXpath加载DOM,用于查询        $contents = $xpath->query($path); // 获取所有内容        $data = [];        foreach ($contents as $value) {            if ($tag == 1) {                $data[] = $value->nodeValue; // 获取不带标签内容            } elseif ($tag == 2) {                $data[] = $dom->saveHtml($value);  // 获取带标签内容            } else {                $data[] = $value->attributes->getNamedItem($tag)->nodeValue; // 获取attr内容            }        }        if (count($data) == 1) {            $data = $data[0];        }        return $data;    }

测试程序,调用

//调用    public function get_content()    {        $url = g('url') ?? '';        $tag = g('tag') ?? '';        $attr = g('attr') ?? '';        $value = g('value') ?? '';        if (empty($url) || empty($tag)) {            resultInfo(4, '缺少关键参数!');        }        $html = $this->curlHtml($url);        //使用正则获取        $data = $this->get_tag_data($html, $tag, $attr, $value);        //Xpath方法,暂未搞明白        // $data = $this->get_html_data($html, $path, $tag = 1, $type = true);        resultInfo(1, 'ok!', $data);    }

来源地址:https://blog.csdn.net/qq_41469037/article/details/126421221

--结束END--

本文标题: PHP 实现网页爬虫

本文链接: https://lsjlt.com/news/402072.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP 实现网页爬虫
    方法一 通过fopen和stream_get_contents获取html内容 从给定的url获取html内容 function _getUrlContent($url) { //fopen() 函数打开一个文件...
    99+
    2023-09-10
    爬虫 php 开发语言
  • Python网页爬虫代码
    网页爬虫是一种自动化程序,可以自动地访问网页并提取其中的信息。它可以用于各种目的,例如搜索引擎的索引、数据挖掘、价格比较、舆情监测等。网页爬虫通常使用编程语言编写,例如Python、Java等。 以下...
    99+
    2023-09-02
    python 爬虫 开发语言 远程桌面 动态ip
  • 爬虫基础(二)——网页
    前言   爬虫要爬取的信息主要来自于网页加载的内容,有必要了解一些网页的知识。   当我们在浏览器网址栏输入一个网址——URL,经过TCP/IP协议簇的处理,这个网址请求的信息就被发送到URL对应的服务器,接着服务器处理这个请求,并将请求...
    99+
    2023-01-30
    爬虫 网页 基础
  • Python用requests模块实现动态网页爬虫
    目录前言开发工具环境搭建总结前言 Python爬虫实战,requests模块,Python实现动态网页爬虫 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块:...
    99+
    2024-04-02
  • 使用nodejs实现网页爬虫功能的案例
    这篇文章主要介绍了使用nodejs实现网页爬虫功能的案例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。网页源码使用http.get()方法获取网页源码,以hao123网站的头...
    99+
    2023-06-06
  • python爬虫入门实战之爬取网页图片
    本篇文章给大家带来了关于Python的相关知识,其中主要整理了爬取网页图片的相关问题,要想高效的获取数据,爬虫是非常好用的,而用python做爬虫也十分简单方便,下面通过一个简单的小爬虫程序来看一看写爬虫的基本过程,下面一起来看一下,希望对...
    99+
    2022-07-11
    python
  • Python实现网页爬虫基本实现代码怎么编写
    Python实现网页爬虫基本实现代码怎么编写,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python是一款功能强大的计算机程序语言,同时也可以被看做是一款面向...
    99+
    2023-06-17
  • PHP Linux脚本操作实例:实现网络爬虫
    网络爬虫是一种程序,它自动浏览互联网上的网页,收集并提取所需的信息。对于网站数据分析、搜索引擎优化或市场竞争分析等应用来说,网络爬虫是非常有用的工具。在本文中,我们将使用PHP和Linux脚本来编写一个简单的网络爬虫,并提供具体的代码示例。...
    99+
    2023-10-21
    PHP 爬虫 Linux
  • Python3网络爬虫实战-10、爬虫框
    我们直接用 Requests、Selenium 等库写爬虫,如果爬取量不是太大,速度要求不高,是完全可以满足需求的。但是写多了会发现其内部许多代码和组件是可以复用的,如果我们把这些组件抽离出来,将各个功能模块化,就慢慢会形成一个框架雏形,久...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-17、爬虫基
    爬虫,即网络爬虫,我们可以把互联网就比作一张大网,而爬虫便是在网上爬行的蜘蛛,我们可以把网的节点比做一个个网页,爬虫爬到这就相当于访问了该页面获取了其信息,节点间的连线可以比做网页与网页之间的链接关系,这样蜘蛛通过一个节点后可以顺着节点连线...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-11、爬虫框
    ScrapySplash 是一个 Scrapy 中支持 JavaScript 渲染的工具,本节来介绍一下它的安装方式。ScrapySplash 的安装分为两部分,一个是是 Splash 服务的安装,安装方式是通过 Docker,安装之后会...
    99+
    2023-01-31
    爬虫 实战 网络
  • Python3网络爬虫实战-15、爬虫基
    在写爬虫之前,还是需要了解一些爬虫的基础知识,如 HTTP 原理、网页的基础知识、爬虫的基本原理、Cookies 基本原理等。 那么本章内容就对一些在做爬虫之前所需要的基础知识做一些简单的总结。 在本节我们会详细了解 HTTP 的基本原理...
    99+
    2023-01-31
    爬虫 实战 网络
  • nodeJS实现简单网页爬虫功能的实例(分享)
    本文将使用nodeJS实现一个简单的网页爬虫功能 网页源码 使用http.get()方法获取网页源码,以hao123网站的头条页面为例 http://tuijian.hao123.com/hotrank ...
    99+
    2022-06-04
    爬虫 实例 简单
  • Python怎么用requests模块实现动态网页爬虫
    小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发工具Python版本: 3.6.4相关模块:urllib模块;random模块;requests模块...
    99+
    2023-06-29
  • 利用java怎么实现一个网页爬虫功能
    利用java怎么实现一个网页爬虫功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。爬虫实现原理网络爬虫基本技术处理网络爬虫是数据采集的一种方法,实际项目开发中,通过爬虫做数...
    99+
    2023-05-31
    java ava
  • Python怎么爬虫网页数据
    在Python中,可以使用多种库和框架来实现网页数据的爬取,其中最常用的是requests和BeautifulSoup库。以下是一个...
    99+
    2023-09-04
    python
  • python爬虫爬取bilibili网页基本内容
    用爬虫爬取bilibili网站排行榜游戏类的所有名称及链接: 导入requests、BeautifulSoup import requests from bs4 import Be...
    99+
    2024-04-02
  • 【Python3爬虫】拉勾网爬虫
    一、思路分析:在之前写拉勾网的爬虫的时候,总是得到下面这个结果(真是头疼),当你看到下面这个结果的时候,也就意味着被反爬了,因为一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正...
    99+
    2023-01-31
    爬虫 拉勾网
  • Python网络爬虫之Web网页基础
    目录⭐️Web网页基础🌟1.网页的组成✨HTML✨CSS✨JavaScript🌟2.网页的结构🌟3.节点树和节点间的关系🌟4.选择器🌟5.总结⭐️Web网页基础 我们在学习爬虫之前,...
    99+
    2023-05-15
    Python网络爬虫Web网页基础 Python网络Web网页基础 Python Web网页基础
  • Java实现爬虫
    为什么我们要爬取数据 在大数据时代,我们要获取更多数据,就要进行数据的挖掘、分析、筛选,比如当我们做一个项目的时候,需要大量真实的数据的时候,就需要去某些网站进行爬取,有些网站的数据...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作