在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
个中:
Ø ji参数的值为事情地点:这里看到的值”%E7%BB%B5%E9%98%B3”并非乱码;而是对中文利用urlencode后的结果,我们也可以直接跟明码,比如ji=绵阳;
Ø Kw参数的值为职位;
Ø 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 匹配出配置职位月薪、事情地点、发布韶光,连续添加代码
经由以上处理,终极将得到一个如下形式的数组:
至此,我们已经得到了想要提取的数据。
完全代码:
该文章只是供应了一种在网页上爬取我们想要的内容的大致方法,中间有些步骤和代码还可以连续优化,还存在不敷之处,欢迎大家一起谈论,毕竟在编程中,没有最好的代码,只有更好的思想。