简单的php爬网页

作者: 3275508ab630 | 来源:发表于2018-11-10 15:19 被阅读79次

笔者用了两个第三方包

  1. https://github.com/kitetail/zttp 用来请求网页
  2. https://github.com/symfony/dom-crawler 获取网页指定内容

1. 安装第三方包

composer require kitetail/zttp
composer require symfony/dom-crawler

2. 访问网页

假设我们要抓取 http://www.w3school.com.cn/xpath/index.asp 这个网页的左侧栏目录。

左侧栏目录.png
Zttp 请求这个地址
$response = Zttp::get('http://www.w3school.com.cn/xpath/index.asp');
$body = $response->body();

这个 $body 就是网页源码字符串了,但是打印它出现的中文字是乱码。我们看到网页源代码其中16行

<meta charset="gbk" />

gbk 转成 utf-8

$body = iconv('GBK', 'UTF-8', $body);

3. 获取指定内容

拿到指定内容有很多种方式,比如正则,JQuery选择器,css选择器。笔者下面用 xpath 来选取内容。
chrome 右键定位内容选择检查,右键控制台中 html 的节点,点击 CopyCopy XPath

控制台.png
我们就拿到了路径
//*[@id="course"]/ul[1]/li[1]/a

把上面的 $body 放入 Crawler 类里进行操作,用上面的 xpath 路径就能拿到想要的内容

$crawler = new Crawler();
$crawler->addHtmlContent(trim($body));
$data1 = $crawler->filterXPath('//*[@id="course"]/ul[1]/li[1]/a');
$text1 = $data1->text();
$data2 = $crawler->filterXPath('//*[@id="course"]/ul[1]/li[2]/a');
$text2 = $data2->text();
...

上面的 li[1] 就和我们取数组中的值一样,不一样的是下标从 1 开始。li 有很多个,我们需要循环去取,修改一下上面的代码

$data = $crawler->filterXPath('//*[@id="course"]/ul[1]/li')->each(function (Crawler $node, $i) {
                return $node->text();
        }); //$data 是数组,是我们最终想要的值
data.png
注意 xpath,下面的是取了所有的 li$node就是一个个 li

4. 其他

假如我们要 去掉 前两个 li 和最后两个 lixpath有两个谓语可以帮助我们 position()last()

$data = $crawler->filterXPath('//*[@id="course"]/ul[1]/li[position()>2 and position()<last()-1]')->each(function (Crawler $node, $i) {
                return $node->text();
        });

在括号里设置条件就能取出我们想要的范围。当然 xpath 还有其他语法,可以去文档中学习,复杂的爬虫会涉及到账号登录,多线程,动态ip等等,大家自行深入去学习。

相关文章

  • 简单的php爬网页

    笔者用了两个第三方包 https://github.com/kitetail/zttp 用来请求网页 https:...

  • PHP爬取网页

    主要流程就是获取整个网页,然后正则匹配(关键的)。 PHP抓取页面的主要方法,有几种方法是网上前辈的经验,现在还没...

  • 爬虫学习笔记(1)

    爬虫入门的学习比我想象的要简单,目前已经掌握了固定网页的定向爬取。 网页爬取 Requests库的7个主要方法 g...

  • Python 学习笔记 094

    本周学习内容 07 本次分享主题 自动爬取网页内容并保存为TXT 06 自动爬取小说 1.简单逻辑 1.1请求网页...

  • 《从零开始学Python网络爬虫》概要

    概要 本文集详解网络爬虫的原理、工具、框架和方法。 详解从简单网页到异步加载网页,从简单存储到数据库存储,从简单爬...

  • Python实战学习笔记 爬去真实网页信息

    爬取URL结果 爬取代码 爬取心得通过这次爬去学会从网页找不同页面地址之间的规律爬去网页,单次爬取的网页可以作为循...

  • Python3.x爬虫教程:爬网页、爬图片、自动登录

    1、第一个示例,我们要来进行简单的爬虫来爬别人的网页 这是爬回来的网页输出: 这中间到底发生了什么事呢?让我们打开...

  • Python简单爬取网页图片

    网页数据的采集及相关库 在python中我们通过网络库进行数据的采集和下载。网络库.png ​ urllib库...

  • Python爬取网页简单示例

    准备材料 一:使用到的Python第三方库是requests 和 BeautifulSoup二:选择要爬取的网页我...

  • node.js爬虫入门(二)爬取动态页面(puppeteer)

    之前第一篇爬虫教程node.js爬虫入门(一)爬取静态页面讲解了静态网页的爬取,十分简单,但是遇到一些动态网页(a...

网友评论

    本文标题:简单的php爬网页

    本文链接:https://www.haomeiwen.com/subject/odqaxqtx.html