作者:phill 在web开发中,有时需要从其他网页的内容中提取我们需要的信息,抓取页面信息需要使用curl方法,但是要从所抓取到的信息中提取到我们真正需要的内容,需要使用正则表达式进行匹配。 这里,我将简单阐述如何利用正则匹配,从网站的页面中提取我们想要的招聘信息,具体分为以下几步: 1、分析我们要抓取内容网页的url构成; 2、根据实际情况拼接我们需要的url; 3、读取网页内容; 4、根据返回的内容使用正则匹配出我们需要的内容; 步骤一 分析url构成: 在网站的搜索职位页面中,选定工作地点和职位后进行搜索, 发现其url构成如下: http://xxx.xxx.com/jobs/searchresult.asp?jl=%E7%BB%B5%E9%98%B3&kw=java&sm=0&p=1 其中: �0�1 ji参数的值为工作地点:这里看到的值”%E7%BB%B5%E9%98%B3”并非乱码;而是对中文使用urlencode后的结果,我们也可以直接跟明码,比如ji=绵阳; �0�1 Kw参数的值为职位; �0�1 p参数为页码; 步骤二 现在我们构建想要访问的url:
步骤三 使用file_get_contents函数抓取该网站内容:
现在需要使用Google浏览器的调试工具,观察一下此部分的html结构,以便编写对应的正则表达式: 该部分内容的html结构均为: 步骤四 使用正则表达式匹配出需要的内容: 先使用正则表达式匹配出该部分的值,参照以上html结构,所构建的正则表达式(这里我们使用效率更高的PCRE模式)为:
我们使用匹配函数preg_match_all:
通过以上匹配,可以将匹配到的内容放入$arr这个数组中,返回内容如下:
继续使用正则表达式匹配到我们需要的内容,但是之前构建的url中页码值为1,我们需要匹配到所有的页,所以需要修改之前的url,并且我们需要使用循环,但是要用到何种循环结构呢?我们需要先观察页面中“下一页”按钮的html结构:
我们可以匹配上图中a标签中的class名称“nopress2”判断是否还有下一页,如果能匹配出该值,说明没有下一页,所以我们使用do……while循环结构来获取所有的页面内容,代码修改如下:
当匹配到“nopress2”时,while条件不再满足,停止循环。 1、根据以下html结构,找到职位名称和对应的a标签中的url
这里使用foreach遍历我们刚才得到的数组$arr,将代码添加至do……while内:
2 找到公司名称和对应的url,在foreach中继续添加代码
3 匹配出配置职位月薪、工作地点、发布时间,继续添加代码
经过以上处理,最终将得到一个如下形式的数组:
至此,我们已经得到了想要提取的数据。 完整代码:
该文章只是提供了一种在网页上爬取我们想要的内容的大致方法,中间有些步骤和代码还可以继续优化,还存在不足之处,欢迎大家一起讨论,毕竟在编程中,没有最好的代码,只有更好的思想。 |
| 本文出处: http://www.toutiao.com/a6407323739285176578/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|