XX之家的爬虫之旅

[导读]  因为本人公司正处于P2P的行业,分析行业数据,对平台的运营决策有着很大的作用,因此需要爬XX之家的相关数据。

1、分析

通过右键查看页面源代码发现页面结构为表格布局,因此设想可以分为四个步骤来采集数据:1、使用爬虫将页面抓取下来;2、对页面数据进行解析;3、入库;4、写个定时服务每天定时抓取。因为公司网站也使用了PHP最近也学习了一点,听说curl非常适合用来爬去网页,决定用PHP程序来抓取。

2、抓取页面

有一个小插曲,刚开始抓取的时候,返回的页面信息都是404.html,最后分析发现网站对非浏览器的请求进行了屏蔽,直接跳转404。后台加绿色代码的部分,成功抓取数据。

function crawl($url){
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_HEADER, false);
         

curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)‘);

         curl_setopt($curl, CURLOPT_POST, 1);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         $result=curl_exec($ch);
         curl_close($ch);
         return $result;
    }

3、解析数据

     查看页面源代码发现,第一行为title去掉,最后两列为平台的连接和关注,均过滤掉。第一列的id需要根据下列的连接来截取,中间的所有数据会有汉子的单位和一些特殊字符,使用preg_replace进行替换,最后安装XX平台的数据,进行拼接入库的SQL返回,done。

function  analyze($dom,$satTime){
        $html = new simple_html_dom();
        $sql= "insert into XXX_data (XXPlatId,platName,averageMonth,dayTotal,averageRate,investNumber,averageInvestMoney,averageBorrowTime,borrowNumer,borrowBidNumber,averageBorrowMoney,firstTenInvestRate,firstTenBorrowRate,bidEndTime,registerTime,registerMoney,leverageFund,invest30total,repay60total,repayTotal,statisticsTime,excuteTime) values ";
        $html->load($dom);
        $istitle=0;
        foreach($html->find(‘tr‘) as $tr){
          $istitle=$istitle+1;
          if($istitle==1){
            continue;
          }
          $sql.="(";
          $count=0;
          foreach($tr->find(‘td‘) as $element){
              $count=$count+1;
              if($count==1){
                $href=$element->next_sibling()->find(‘a‘, 0)->href;
                $href=strstr($href, ‘.‘, TRUE);
                $href=strstr($href,‘-‘);
                $sql.="‘".substr($href,1)."‘,";
              }elseif($count==2){
                $val=$element->find(‘a‘, 0)->innertext;
                $sql.="‘".$val."‘,";
              }elseif($count<21){
                $patterns = array();
                $patterns[0] = ‘/([\x80-\xff]*)/i‘;
                $patterns[1] = ‘/[%*]/‘;
                $val=preg_replace($patterns,‘‘,$element->innertext);
                $sql.="‘".$val."‘,";
              }
          }
          $sql.="‘".$satTime."‘,‘".date(‘Y-m-d H:i:s‘)."‘),";
        }
        $sql = substr($sql,0,strlen($sql)-1);
        $sql = strip_tags($sql);
        return $sql;
    }

4、入库

         通过网上的查找学习,发现PHP操作mysql比起java来说很简单,几句代码搞定.

 function  save($sql){
        $con = mysql_connect("192.168.0.1","root","root");
        if (!$con){
           die(‘Could not connect: ‘ . mysql_error());
        }
        mysql_select_db("xx_data", $con);
        mysql_query("set names utf8");
        mysql_query($sql);
        mysql_close($con);
    }

5、批量爬取

     通过分析数据的查询条件,每次的查询都是根据url后缀的日期来查询当日交易数据,  http://XXX/indexs.html?startTime=2015-04-01&endTime=2015-04-01,因为只需要遍历历史日期来拼接URl就用来爬取历史的所有交易。

function execute(){
      $starttime="2014-04-15";
      $endtime="2015-04-15";
      for($start = strtotime($starttime); $start <= strtotime($endtime);$start += 86400){
         $date=date(‘Y-m-d‘,$start);
         $url="http://shuju.XX.com/indexs.html?startTime=".$date."&endTime=".$date;
         //第一步 抓取
         $dom=crawl($url);
         //第二步  解析
         $sql=analyze($dom,$date);
         //第三步 入库
         save($sql);
     }
      echo  "execute end";
    }

     execute();

6、设置定时服务

       设置定时任务来每天固定时间来抓取最新的数据,以免每次手工来执行,php也有自己的定时任务,但是网上看了下实现起来太复杂,因此利用linux的crontab来实现,linux下面输入crontab –e 进入编辑状态,添加一条定时利用curl来调用,至此爬虫功能完毕。

    30 09 * * * curl  http://192.168.0.1/crawl.php

此程序仅供学习交流,如果有需要完整源码的朋友可以单独联系我。

时间: 2024-08-28 10:30:28

XX之家的爬虫之旅的相关文章

在XX之家工作的那些事(2)-- 专利文档引发的不爽

以前在XX之家的时候,上面派给技术部一个重要的工作,就是写技术方面的专利文档,还要求每月每个技术组必须至少写一份. 我们组(二手车技术组)的“重任”就自然落到我头上了(毕竟以前当过部门经理,写文档和报表比较拿手). 当时还规定了奖励规则: 1. 凡是通过了公司级别的审核后,奖励写专利的人2000元 RMB 2. 凡是通过了专利局的审核,成功申请了专利的,再次奖励写专利的人2000元 RMB 刚开始,依照此规定,俺在二手车技术BQQ群里大力做宣传,鼓动大家写. 可效果非常差,大家貌似都不愿意写,每

链家新房爬虫

# 链家新房爬虫 **今日目标** 爬取最新地区以及对应的房价 ```python import requests import re import csv class LianjiaSpider(object): def __init__(self): self.url='https://cq.lianjia.com/ershoufang/pg{}/' self.headers={'User-Agent': 'Mozilla/5.0'} #获取网址 def get_page(self,url)

高频访问IP限制 --Openresty(nginx + lua) [反爬虫之旅]

嗯-.本人是从写爬虫开始编程的,不过后面做web写网站去了,好了,最近web要搞反爬虫了,哈哈哈,总算有机会把之以前做爬虫时候见识过的反爬一点点给现在的网站用上了~ 做爬虫的同志,有怪莫怪喽~还有求别打死 > < 首先要提一下AJAX,现在普天下网页几乎都是往特定的数据接口请求数据了,除了什么首屏渲染这种服务端渲染好html以外,几乎没有什么静态网页了.我看了有一些帖子说AJAX让爬虫难做,可是我觉得结合一些工具(比如chrome的开发者工具),找到AJAX所请求的后端数据接口一点也不难,而且

大众点评网商家数据采集爬虫实现源码

源码如下,以大家最爱的黄焖鸡米饭为例~大家可以拷贝到神箭手云爬虫(http://www.shenjianshou.cn/)上直接运行: // 大众点评上爬取所有"黄焖鸡米饭"的商户信息 var keywords = "黄焖鸡米饭"; var scanUrls = []; //国内的城市id到2323,意味着种子url有2323个 //作为sample,这里改成1,只爬取上海的黄焖鸡米饭门店 //for (var i = 1; i <= 2323; i++) {

某家简单爬虫记录

定义爬取数据 import scrapy class LianjianItem(scrapy.Item): name = scrapy.Field() address = scrapy.Field() type = scrapy.Field() size = scrapy.Field() price = scrapy.Field() 编写爬虫文件 # -*- coding: utf-8 -*- import scrapy from lianjian.items import LianjianIt

链家网爬虫同步VS异步执行时间对比

异步执行时间 import time import asyncio import aiohttp from lxml import etree start_time = time.time() async def get_url(url): session = aiohttp.ClientSession() response = await session.get(url) result = await response.text() terr = etree.HTML(result) ret

链家二手房成交爬虫

逐渐有了买房的想法,研究一段时间之后,发现各大网站都没有给出一个完整的房价统计数据和走势.好在链家网的每一条二手房成交记录都有对应的网页.如果能把每一套房的成交信息(面积,单价,总价,成交时间,户型,版块,行政区等等)拿到,存入db或者excel中,那么要分析历史走势就容易多了.此程序就是能够抓取链家网二手房成交记录的爬虫 获取所有成交记录url 以成都为例,打开https://cd.lianjia.com/chengjiao/ 可以看到所有已经成交的二手房.每一页显示30个记录,点击记录的标题

有趣的Node爬虫,数据导出成Excel

最近一直没更新了诶,因为学习Backbone好头痛,别问我为什么不继续AngularJs~因为2.0要出来了啊,妈蛋!好,言归正传,最近帮我的好基友扒数据,他说要一些股票债券的数据.我一听,那不就是要做爬虫了么...果断用Node做!(其实也有一个股票数据API,sina提供的,但是由于不适用于债券,没办法,只好自己动手丰衣足食了) 工欲善其事,必先利其器嘛,蓬勃的Node社区提供了非常多的好的工具,下面我列出将要使用的工具: request,封装了Node的原生的http模块,使API更加简洁

爬虫(heritrix框架)

Heritrix 下载 目前 Heritrix 的最新版本是 1.14.4(2010-5-10 发布),您可以从 SourceForge(http://sourceforge.net/projects/archive-crawler/files/)上下载.每个版本都有四个压缩包,两个 .tar.gz 包用于 Linux 下,.zip 用于 windows 下.其中 heritrix-1.14.4.zip 是源代码经过编译打包后的文件,而 heritrix-1.14.4-src.zip 中包含原始