【爬虫】爬取搜索引擎类页面的爬虫小框架 /爬取搜索结果页面的通用小爬虫(php和python实现)

本文介绍了一个适用于爬取搜索引擎数据的小型爬虫框架,通过PHP和Python实现。作者分享了爬取百度学术搜索结果的步骤,包括分析URL参数、编写正则表达式、提取数据,并讨论了如何处理反爬虫机制。还提供了源码链接及后续的邮件提醒功能实现。
摘要由CSDN通过智能技术生成

最近抽时间总结了一下爬虫,写了一个小爬虫框架(工具),便于自己以后需要使用爬虫时不必重新再写,也作为爬虫教程示例记录一下。

本爬虫适用于爬取搜索引擎的数据,适用于大多数搜索引擎的搜索结果页面的数据爬取。

整个爬虫的编写过程,即此类爬虫的实现思路如下:
1. 首先确认一个想要爬取的网页;
2. 输入不同的关键字,选择不同的排序方式以及每一页显示的结果数量(如果有这些选项的话)等等;
3. 每更改一次选项和点击一次“搜索”,就观察地址栏 url 参数的变化情况,以确定要爬取网页的 url;
4. 使用该 url,编写代码尝试爬取网页源码;
5. 爬取源码成功后,开始分析源码,写出用于匹配你想要的数据的正则表达式;
6. 使用写好的正则表达式匹配源码,提取(解析)出你想要的数据内容;
7. 根据你的需要处理这些数据。

下面以爬取百度学术为例,写一个负责每天查看我的研究方向最新论文的爬虫,以便当出现新论文时,它能够及时提醒我查看。
很简单,很快就能学会。

实现步骤:

  1. 打开百度学术,输入我的研究方向“protocol reverse”,点击“搜索”,观察地址栏的url。
    然后选择“按时间排序”,如下图,可以看到地址栏url的“sort”参数值变成了“sc_time”,这就是按时间排序的意思。然后再仔细观察可以看到url里还有个“wd”参数(word的缩写,不同的网站参数名一般也不同),该参数的值就是已输入的关键字,此参数可以手动修改,修改之后按回车,网站就会以新输入的关键字进行搜索,这和在搜索框输入和修改是一样的效果。
    在这里插入图片描述

  2. 复制该url到代码中,尝试将该url对应的源码爬取下来;

    贴上我实现爬取的php函数代码:

/* 爬取网站的html源码
 * $url        : 网站链接
 * $cookie     : 请求头部中的cookie值,即header中的cookie值
 * $proxy      : 代理ip,默认为空(若爬取源码失败,可能是主机ip被封,此时可以使用已有的代理再次尝试获取)
 * $proxy_port : 代理端口号,默认为空
 * $referer    : 来源地址,有些网站需要有该参数才能爬取到源码
 * $gzip       : 是否使用gzip编码
 * return      : 返回$url对应的网站源码
 */
function get_html($url, $cookie='', $proxy='', $proxy_port='', $referer='', $gzip=false) {
   
    $ch = curl_init();
    // 设置选项,包括URL
    curl_setopt($ch, CURLOPT_URL, $url);
    //curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.3 Safari/537.36');
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);      // 允许页面跳转,获取重定向
    curl_setopt($ch, CURLOPT_HEADER, 0);              // 设置头文件的信息作为数据流输出
    curl_setopt($ch, CURLOPT_TIMEOUT, 60);            // 60秒超时
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  // https跳过检查
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  // https跳过检查

    if($gzip) curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // 编码格式

    if($cookie != '') {
   
        $coo = "Cookie:$cookie";
        $headers[] = $coo;
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);  // 设置请求头部信息
    }
    if($referer != '') {
   
        curl_setopt($ch, CURLOPT_REFERER, 
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值