最新消息:

php利用curl方法和正则表达式提取网页内容

PHP zhanyikeji 152浏览 0评论

作者:phill

在web开发中,有时需要从其他网页的内容中提取我们需要的信息,抓取页面信息需要使用curl方法,但是要从所抓取到的信息中提取到我们真正需要的内容,需要使用正则表达式进行匹配。

这里,我将简单阐述如何利用正则匹配,从网站的页面中提取我们想要的招聘信息,具体分为以下几步:

1、分析我们要抓取内容网页的url构成;

2、根据实际情况拼接我们需要的url;

3、读取网页内容;

4、根据返回的内容使用正则匹配出我们需要的内容;

步骤一 分析url构成:

在网站的搜索职位页面中,选定工作地点和职位后进行搜索,

php利用curl方法和正则表达式提取网页内容

发现其url构成如下:

http://xxx.xxx.com/jobs/searchresult.asp?jl=%E7%BB%B5%E9%98%B3&kw=java&sm=0&p=1

其中:

Ø ji参数的值为工作地点:这里看到的值”%E7%BB%B5%E9%98%B3”并非乱码;而是对中文使用urlencode后的结果,我们也可以直接跟明码,比如ji=绵阳;

Ø Kw参数的值为职位;

Ø p参数为页码;

步骤二 现在我们构建想要访问的url:

php利用curl方法和正则表达式提取网页内容

步骤三 使用file_get_contents函数抓取该网站内容:

php利用curl方法和正则表达式提取网页内容

现在需要使用Google浏览器的调试工具,观察一下此部分的html结构,以便编写对应的正则表达式:

php利用curl方法和正则表达式提取网页内容

该部分内容的html结构均为:

php利用curl方法和正则表达式提取网页内容

步骤四 使用正则表达式匹配出需要的内容:

先使用正则表达式匹配出该部分的值,参照以上html结构,所构建的正则表达式(这里我们使用效率更高的PCRE模式)为:

php利用curl方法和正则表达式提取网页内容

我们使用匹配函数preg_match_all:

php利用curl方法和正则表达式提取网页内容

通过以上匹配,可以将匹配到的内容放入$arr这个数组中,返回内容如下:

php利用curl方法和正则表达式提取网页内容

继续使用正则表达式匹配到我们需要的内容,但是之前构建的url中页码值为1,我们需要匹配到所有的页,所以需要修改之前的url,并且我们需要使用循环,但是要用到何种循环结构呢?我们需要先观察页面中“下一页”按钮的html结构:

php利用curl方法和正则表达式提取网页内容

php利用curl方法和正则表达式提取网页内容

我们可以匹配上图中a标签中的class名称“nopress2”判断是否还有下一页,如果能匹配出该值,说明没有下一页,所以我们使用do……while循环结构来获取所有的页面内容,代码修改如下:

php利用curl方法和正则表达式提取网页内容

php利用curl方法和正则表达式提取网页内容

当匹配到“nopress2”时,while条件不再满足,停止循环。

1、根据以下html结构,找到职位名称和对应的a标签中的url

php利用curl方法和正则表达式提取网页内容

这里使用foreach遍历我们刚才得到的数组$arr,将代码添加至do……while内:

php利用curl方法和正则表达式提取网页内容

2 找到公司名称和对应的url,在foreach中继续添加代码

php利用curl方法和正则表达式提取网页内容

3 匹配出配置职位月薪、工作地点、发布时间,继续添加代码

php利用curl方法和正则表达式提取网页内容

经过以上处理,最终将得到一个如下形式的数组:

php利用curl方法和正则表达式提取网页内容

至此,我们已经得到了想要提取的数据。

完整代码:

php利用curl方法和正则表达式提取网页内容

php利用curl方法和正则表达式提取网页内容

php利用curl方法和正则表达式提取网页内容

该文章只是提供了一种在网页上爬取我们想要的内容的大致方法,中间有些步骤和代码还可以继续优化,还存在不足之处,欢迎大家一起讨论,毕竟在编程中,没有最好的代码,只有更好的思想。

转载请注明:PHP学习 » php利用curl方法和正则表达式提取网页内容

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址