php抓取网页动态数据(PHP是什么东西?PHP的爬虫有什么用?Python)
优采云 发布时间: 2022-01-13 11:01php抓取网页动态数据(PHP是什么东西?PHP的爬虫有什么用?Python)
一、什么是 PHP?
PHP(外文名称:PHP:Hypertext Preprocessor,中文名称:“Hypertext Preprocessor”)是一种通用的开源脚本语言。语法吸收了C语言、Java和Perl的特点,有利于学习,应用广泛,主要适用于Web开发领域。PHP 的独特语法是 C、Java、Perl 和 PHP 自己的语法的混合。它可以比 CGI 或 Perl 更快地执行动态网页。与其他编程语言相比,PHP制作的动态页面是将程序嵌入到HTML(标准通用标记语言下的应用程序)文档中执行,执行效率远高于完全生成HTML标记的CGI ; PHP也可以执行编译后的代码,编译后可以实现加密和优化代码运行,使代码运行得更快。——百度百科上的描述。
二、爬虫有什么用?
爬行动物有什么用?先说一下什么是爬虫。我认为爬虫是一个网络信息采集程序。可能是我自己的理解有误,请指正。由于爬虫是一个网络信息采集程序,它是用来采集信息的,采集到的信息在网络上。如果还不清楚爬虫是干什么用的,我举几个爬虫应用的例子:搜索引擎需要爬虫采集网络信息供人们搜索;大数据数据,数据从何而来?即可以被爬虫在网络中爬取(采集)。
三、经常听到爬虫就想到Python,但是为什么我用PHP而不是Python呢?
Python 老实说,我不知道 Python。(我真的不懂Python,不知道你能不能去百度一下,因为我真的不懂Python。)我一直认为用PHP写东西,只要想出一个算法程序就可以了,并且不需要考虑太多的数据类型。问题。PHP 的语法与其他编程语言类似,即使您一开始不了解 PHP,也可以立即开始使用。PHP 的语法与其他编程语言类似,即使您一开始不了解 PHP,也可以立即开始使用。想法是错误的。) 我其实是一个PHP初学者,我想通过写点东西来提高我的水平。(下面的部分代码可能会让你觉得不规范,请指正,谢谢。)
四、PHP爬虫第一步
PHP爬虫第一步,第一步……当然,第一步是搭建PHP运行环境。PHP如何在没有环境的情况下运行?就像鱼不能离开水一样。(我不够了解,可能我的fish例子不够好,请见谅。)我在Windows系统下使用WAMP,在Linux系统下使用LNMP或LAMP。
WAMP:Windows + Apache + Mysql + PHP
灯:Linux + Apache + Mysql + PHP
LNMP:Linux + Nginx + Mysql + PHP
Apache 和 Nginx 是 Web 服务器软件。
Apache 或 Nginx、Mysql 和 PHP 这些是 PHP Web 的基本配置环境。网上有PHP Web环境的安装包。这些安装包使用起来非常方便,不需要每次都安装配置。但是如果你担心这些集成安装包的安全问题,你可以到这些程序的官网下载,然后在网上找配置教程。(说实话,我真的不是一个人做的,我觉得很麻烦。)
五、 PHP爬虫第二步
(感觉废话一大堆,我应该马上拿出一段代码!!!)
爬虫网络的核心功能已经写好了。为什么说爬虫的核心功能只写了几行代码?我想有人已经明白了。其实因为爬虫是一个数据获取程序,上面几行代码其实是可以获取到数据的,所以爬虫的核心功能已经写好了。有人可能会说:“你太好了!有什么用?” 虽然我很好,但请不要说出来,让我假装是X。(又废话两行,对不起。)
其实爬虫是做什么用的,主要看你想让它做什么。就像前几天为了好玩写了一个搜索引擎网站,当然网站很好,结果排序不规则,很多都找不到。我的搜索引擎爬虫是写一个适合搜索引擎的爬虫。所以为了方便,我也以搜索引擎的爬虫为目标进行讲解。当然,我的搜索引擎的爬虫还不是很完善,不完善的地方都是你自己去创造和改进的。
六、 搜索引擎爬虫的局限性
有时搜索引擎的爬虫并不是无法从网站的页面获取页面源代码,而是有一个robot.txt文件,而这个文件的网站表示站长确实不想让爬虫爬取页面源代码。(但如果你只是想得到它,即使你有它也可以爬它!)
其实我的搜索引擎的爬虫还是有很多不足造成的限制。例如,它可能无法获取页面的源代码,因为它无法运行 JS 脚本。或者网站有反爬虫机制,阻止获取页面源代码。具有反爬虫机制的网站 就像:知乎,知乎 是具有反爬虫机制的网站。
七、以搜索引擎爬虫为例,准备写爬虫需要的东西
PHP编写基本的正则表达式(也可以用Xpath,对不起,我不会用)数据库使用(本文使用MySql数据库)运行环境(只要有可以运行PHP的环境和数据库网站@ > 可以)
八、搜索引擎获取页面源码,获取页面标题信息
报错示例:
警告:file_get_contents("") [function.file-get-contents]:无法打开流:第 25 行的 E:\website\blog\test.php 中的参数无效
https 是 SSL 加密协议。如果在获取页面时出现上述错误,说明你的 PHP 可能缺少 OpenSSL 模块。您可以在网上找到解决方案。
九、搜索引擎爬虫的特点
虽然没见过“百度”、“谷歌”这样的爬虫,但是通过猜测和实际爬取过程中遇到的一些问题,我自己总结了几个特点。(可能有错漏,欢迎指正,谢谢。)
概论
概括性是因为我觉得搜索引擎的爬虫一开始不是为哪个网站设计的,所以要求尽可能多的爬网站,这是第一点。第二点是从网页中获取的信息是这样的。一开始不会因为一些特殊的小网站而放弃一些信息。例如:一个小的网站网页如果meta标签中没有描述或关键词信息(关键字),直接放弃提取描述信息或关键词信息。当然,如果某个页面没有这些信息,我会提取该页面。里面的文字内容是用来填充的,反正,每个网页的信息项应尽可能相同,以实现爬取的网页信息。这就是我认为搜索引擎爬虫的普遍性,当然我可能错了。(我可能说得不太好,我还在学习。)
不确定
不确定性是我对爬虫抓取哪些网页的控制能力不足,只能控制我能想到的情况。这也是因为我写的算法就是这样的。我的算法是从爬取得到的页面中的所有链接,然后爬取得到这些链接,其实是因为搜索引擎不是在搜索某些东西,而是尽可能的,因为只有更多的信息才能找到最合适的答案用户想要的。所以我觉得搜索引擎的爬虫肯定是有不确定性的。(我自己又看了一遍,也觉得有点看不懂我说的话,请见谅,欢迎指正,提问,谢谢!)
下面的视频是我搜索网站的使用视频,找到的信息是通过我写的PHP爬虫获取的。(这个网站我不再维护了,所以有不足之处,请见谅。)
十、目前可能出现的问题
得到的源代码乱码
2. 无法获取标题信息
3.无法获取页面源代码
十一、获取网页时要做的事情
我们不要去想很多网页,因为很多网页也是一个循环。
获取页面源代码。通过源码提取页面信息。如何处理提取的信息并放入数据库?
十 二、按照十一思路的代码
保存页面的十个三、PHP图片创意
获取页面源代码 获取页面图片链接 使用函数保存图片
10四、保存图片示例代码
十个五、gzip解压
本来以为自己写的爬虫差不多完成了,只是反爬虫网站很难爬,应该是可以爬的。但是有一天我尝试爬到bilibili的时候,出现了一个问题。发现我的数据库里全是乱码,没有标题什么的,好奇怪!后来发现是GZIP压缩的原因。原来我直接使用file_get_content函数得到的页面是一个未压缩的页面,一切都是乱码!好的,那我知道问题在那里了,下一步就是想办法解决。(其实那个时候我根本不知道gzip怎么解压,全靠搜索引擎,哈哈哈哈)。
我有两个解决方案:
在请求头告诉对方服务器我的爬虫(不……应该是我的浏览器)不支持gzip解压,请不要压缩,直接把数据发给我!
// 这是request header(请求头)
$opts = array(
'http'=>array(
'method'=>"GET",
"timeout"=>20,
'header'=>"User-Agent: Spider \r\n".
"accept-encoding:"
)
);
// 我把accept-encodeing(能接收编码)设为空,代表不接受gzip
2.如果你告诉对方的服务器这个浏览器(爬虫)不支持解压gzip,但是他继续给你发送gzip数据,那就没有别的办法了。函数 - gzdecode()。
// 废话:好久没更新了,因为最近又在造轮子了,不过好开心——2019.01.14
十个六、子链接获取
网络爬虫就好比网页源代码的自动另存为操作,但如果真的是手动输入网址供爬虫爬取,那还不如手动另存为!所以在这里我们必须解析那些子链接。一个网页实际上有很多a标签,这些a标签的href属性值会是一个子链接。(为什么感觉这句话有点废话?大家应该都知道吧!)原来的子链接是通过很多工具分析得到的(我没用html工具,只是用了正则表达式和工具)为什么叫raw data ,因为这些子链接很多不是url链接,或者一些不完整的链接,或者如果你想爬一个网站,当你不想爬虫跑完的时候,你得去掉一些不是该 网站@ > 链接以防止爬虫用完。下面我列出了一些原创子链接。(其实是我喷的坑……)
http://example.com/
./index.html
index.html
//example.com/index.html
javascript:;
../index.html
http://example2.com/index.html
可以看到这里的链接有很多种,包括完整的绝对路径链接,不完整的相对路径链接,还有一些javascript链接。如果是相对路径或者javascript链接,可以直接给爬虫爬取。迷惑爬虫,因为它不完整或根本不是链接。因此,有必要完成或丢弃子链接。
十个七、子链接处理
说了这么多废话,我们继续废话。好吧,处理实际上就是去重、丢弃和完成。
对于相同的子链接,它们被丢弃而不被保存。对于相对路径链接补全,对于不是链接的链接,它们被丢弃(什么是链接不是链接?我觉得奇怪......)
第一个我就不多说了,相信大家都知道怎么做。
对付第二种方法,我写一个方法,可以运行相对路径就OK了。通过父链接将相对路径转换为绝对路径。(有时间给大家补充一下代码……不好意思)
对于第三个,常规匹配已完成。
10 八、使用DOM获取内容
其实PHP中有HTML DOM,就是通过将HTML文件一个一个解析成节点,再解析成节点,可以减少正则表达式的使用。如果正则表达式使用过多,会导致不规则,或者一些意想不到的情况。因为 HTML 页面不在你的控制之下,你获取 HTML 内容的正则表达式会导致非标准错误。DOM还有一个好处,就是对于不会写正则表达式的人来说,只需要使用xpath表达式就可以得到想要的节点的数据,比使用正则表达式更容易。
十九、使用抓包软件排查网页抓不到的原因
因为有的网站需要登录才能获取数据,或者有的网站需要添加一些具体的请求头才能获取数据,所以我们可以使用抓包软件研究一下,具体需要什么网站 服务器使用该数据进行身份验证。有了抓包软件,我们就可以分析的很清楚了。
# 有什么问题可以留言,让大家一起解决,谢谢。
待续。. .