` 标签的 `href` 属性。然后我就开始写 PHP 代码了。先引入 `QueryList`,然后 `QueryList::get()` 加上那个网页地址,接着就是链式调用了,用 `.rules()` 来定规矩。规矩咋定?就模仿 jQuery 那套呗。
比如说,我要抓所有的标题和链接,我就这么写了个规则:
写好规则,再用 `.query()` 方法, `.getData()` 就行了。第一次跑,还真管用!刷的一下,标题和链接都给我整整齐齐地弄成了一个数组,看着就舒服。
再搞复杂点
尝到甜头了,我就想试试更复杂的。比如一个页面里,信息分散在不同的地方,有图片地址,有发布时间,还有个摘要啥的。
过程也差不多,还是先分析页面结构,找到对应的 CSS 选择器。比如图片地址可能在 `
` 标签的 `src` 属性里,发布时间可能在一个 `` 标签里,类名叫 `publish-time` 之类的。
我就在 `.rules()` 里面加了更多的规则条目,一个条目对应一个我想抓的数据字段。比如:
- 图片: 选择器 `*`,方法 `.attr('src')`
- 时间: 选择器 `*-time`,方法 `.text()`
- 摘要: 选择器 `*`,方法 `.text()`
然后一运行,出来的数据就是结构化的了,每个条目都包含了我定义的标题、链接、图片、时间、摘要这些字段。这处理起来就方便多了,可以直接存数据库或者生成个啥文件。
整个过程下来,感觉确实比以前手写正则舒服多了。 只要你对 CSS 选择器熟悉,那上手 `php querylist` 基本上没啥门槛。它把那些解析 HTML 的脏活累活都包了,我只需要关心我要抓以及它在页面上的“位置”(也就是 CSS 选择器)就行。
也不是说它万能。遇到那种用 JavaScript 动态加载内容加载很多的网站,它可能就抓不到了,毕竟它主要是处理静态 HTML 的。不过对于大部分结构比较稳定的页面,用 `php querylist` 来抓点数据,效率是真的高,代码写起来也清爽不少。
这回实践挺顺利的,以后再有类似的数据抓取需求,我肯定优先考虑用它来搞定。