不败君

前端萌新&初级后端攻城狮

PHP开发-微信公众号文章采集原理及思路

PHP开发-微信公众号文章采集原理及思路

2019-09-24 18:05:27

围观(5616)

之前有发布一篇文章,简单写了一下文章内容页面的爬取。近日又写了一下爬取文章列表,可用于采集公众号文章。

在搜索引擎上搜:搜狗微信文章爬取

可发现一大堆利用了 搜狗 的微信搜索功能去爬取并采集微信公众号文章的内容。

也可以发现,都是用 Python 写的。而本文仍然采用 PHP 编写以达到同样效果,文章仅讲解爬取原理及思路,用于学习研究。


打开 搜狗 weixin.sogou.com 可以随便输入一个关键词搜索公众号文章。

1.png

此时注意看 URL 地址栏

https://weixin.sogou.com/weixin?type=2&s_from=input&query=%E4%B8%8D%E8%B4%A5%E5%90%9B&ie=utf8&_sug_=n&_sug_type_=

简单分析下 URL 参数。

参数 type 是定义搜索类型,为 1 时搜索的是公众号,为 2 就是公众号文章。

参数 query 是定义搜索关键词,注意是经过 URL 编码的。 

另外还有一个 page 参数,由于搜索进来没有翻页 所以这个参数没显示出来。需要知道这个参数是用来翻页即可。


知道 URL 的规则后,就可以进行拼接 URL 进行文章列表采集了,具体代码实现 可参考之前的博文:www.bubaijun.com/page.php?id=134

其实无非就是循环列表的 div 标签搜集到文章的标题、描述、公众号名称。然后执行完了下一页的时候可在原 page 参数值上加一。

到目前为止还没什么技术难点,因为列表的采集没太强的反爬虫,当然 如果执行频率太高就会触发反爬虫机制。所以这个频率要控制好。

触发反爬虫之后:

5.png

之前的博文中是采集文章内容,但是并没有遇到反爬虫机制,此处的列表页是有反爬虫机制的。爬取列表页需要加上 UA 伪造。可参考下面代码:

$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, '列表页地址');
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec($curl);
curl_close($curl);

爬取到该列表的 HTML 代码之后,请求中会有一段 COOKIE,需要将这段 COOKIE 保存下来。然后采集到的 a 标签的 href 值,是需要携带 COOKIE 进行请求的,爬取频率太高就会封禁 IP 及 COOKIE。

2.png

所以本文的做法是不采集 href 属性,而是 data-share 属性,采集之后就很好操作了,和上次的博文几乎一致的操作。

3.png


频率太高很可能就会被封禁 IP,所以还尝试了使用 IP 代理 www.xicidaili.com

使用 IP 代理的方法也很简单,由于这是免费的 IP 代理服务 所以可能随时都会无法连接。解决方法是 先爬取这个站点的 IP 代理,爬取下来执行一次 CURL 看看能不能连上,如果连上就保存起来。

一个简单的 CURL 加代理 DEMO:

$ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, '文章内容页');
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
//curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_COOKIE, '这里可放cookie');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl,CURLOPT_PROXY,'代理 IP');
curl_setopt($curl,CURLOPT_PROXYPORT,'端口');
curl_setopt ($curl, CURLOPT_TIMEOUT, 100);
curl_exec($curl);
curl_getinfo($curl); //可获取请求信息
curl_close($curl);

爬取到了 HTML 后,可使用 PHP Simple HTML DOM Parser 或者 QueryList 进行解析 HTML。

解析 HTML 获取到需要的内容就可以保存到数据库了。

经过处理后的效果(已经可展示在自己的 H5 网页):

4.png

此时已经可以完成利用搜狗爬取微信公众号文章。还有一些网站不写原创文章,使用爬虫到处爬文章发布也是同样的原理。

最后还是说一句,本文仅供学习与研究。


本文地址 : bubaijun.com/page.php?id=138

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语