通用方法:php利用curl方法和正则表达式提取网页内容
优采云 发布时间: 2022-09-23 13:12通用方法:php利用curl方法和正则表达式提取网页内容
在网页开发中,有时我们需要从其他网页的内容中提取我们需要的信息。抓取页面信息需要使用curl方法,但是要从抓取的信息中提取出我们真正需要的内容,需要使用正则表达式进行匹配。
在这里,我将简要说明如何使用正则匹配从网站的页面中提取我们想要的招聘信息,分为以下几个步骤:
1、分析我们要爬取的内容网页的url构成;
2、根据实际情况拼接我们需要的url;
3、阅读网页内容;
4、使用正则模式根据返回的内容匹配我们需要的内容;
第一步:分析url组成:
在网站的搜索职位页面,选择要搜索的职位地点和职位,
发现它的url组成如下:
地点:
Øji参数的值是工位:这里看到的值“%E7%BB%B5%E9%98%B3”不是乱码;就是中文使用urlencode的结果,我们也可以直接跟明码,比如ji=Mianyang;
ØKw参数的值为位置;
Øp参数为页码;
第二步现在我们构造我们要访问的url:
步骤 3 使用 file_get_contents 函数获取 网站内容:
现在需要用谷歌浏览器的调试工具观察这部分的html结构,才能写出对应的正则表达式:
这部分的html结构是:
Step 4 使用正则表达式匹配所需内容:
先用正则表达式匹配这部分的值,参考上面的html结构,构造的正则表达式(这里我们使用效率更高的PCRE模式)为:
我们使用匹配函数preg_match_all:
通过以上匹配,可以将匹配到的内容放入$arr数组中,返回内容如下:
继续使用正则表达式匹配我们需要的内容,但是之前构造的url中的页码值为1,我们需要匹配所有的页面,所以需要修改之前的url,需要使用a循环,但具有什么样的循环结构?我们需要先观察页面中“下一页”按钮的html结构:
我们可以匹配上图中a标签中的类名“nopress2”来判断是否有下一页。如果值能匹配,则表示没有下一页,所以我们使用do...while循环结构来获取所有页面内容,代码修改如下:
当“nopress2”匹配时,不再满足while条件,循环停止。
1、根据下面的html结构,在对应的a标签中找到job title和url
这里我们使用foreach遍历我们刚刚得到的数组$arr,并添加代码do...while:
2 找到公司名称和对应的url,在foreach中继续添加代码
3 匹配配置职位的月薪、工作地点、发布时间,继续添加代码
经过以上处理,最终得到如下形式的数组:
此时,我们有了要提取的数据。
完整代码:
这个文章只是提供了一个通用的方法来抓取网页上我们想要的内容。中间的一些步骤和代码还是可以优化的,但是还是有不足的地方。欢迎大家一起讨论,毕竟在编程中,没有最好的代码,只有更好的想法。
解密:修改hosts文件禁止访问和加速访问某网站
一般情况下,如果我们需要输入一个网站,我们可以直接输入网站的URL来访问。在这个过程中会将URL转换成IP地址,然后再把IP地址转换成IP地址到网站的服务器,但是这个过程比较长,所以访问速度比较慢下面我们来说说如何通过修改hosts文件来禁用访问,提高网站的访问速度!
禁止访问 网站trick
1),用记事本打开C:\Windows\System32\drivers\etc\文件夹下的hosts文件
2),在hosts文件中填写你要封禁的域名,在域名前加127.0.0.1并隔开带空格的本地 IP。节省。如下图(原理是把域名解释为127.的本地IP,所以输入的域名打不开。通过推断可以改变127.@的IP >0 到你要解释的那个。IP 也可以)
以上是通过修改HOSTS文件来禁止对某个网站的访问。释放方式:删除添加的IP和对应的域名
改进对网站速度技巧的访问
1),获取你需要的网站的IP地址,打开运行,输入cmd打开命令提示符; ping你想要和需要的网站域名,获取IP并复制。
2),用记事本打开C:\Windows\System32\drivers\etc\文件夹下的hosts文件,将获取到的IP填入hosts文件。 IP 和域名之间用空格隔开。保存就行了
3),打开你输入的域名,测试一下。 (原理:输入域名时,不需要通过在线服务器解析IP地址,直接在本地解析IP地址,这样会更快。现在大部分光纤网络已经非常快了,而且你可能肉眼感觉不到改善,但事实是改善了。)