简单的python汽车之家爬虫

来源:互联网 发布:曲阜党政网络问政平台 编辑:程序博客网 时间:2024/05/02 02:42

    由于工作要求,需要爬取汽车之家的数据,于是动起了脑筋。平时比较习惯用c++,但c++的urllib用过几次后觉得很不方便,于是改用python写。我们这次的目标是爬取汽车之家的所有车身外观的数据,并按照品牌、车系、年款三个等级进行分类。

    从哪里下手呢?分期汽车之家源码,发现http://car.autohome.com.cn/AsLeftMenu/As_LeftListNew.ashx?typeId=2%20&brandId=0%20&fctId=0%20&seriesId=0这个链接下是所有车辆品牌的列表,正和我意。爬取的逻辑很简单,首先读取品牌列表,打开每个品牌的url,通过正则式取得每个车系的链接。第二步,点开每个车系的链接,车系包含两个页面,一个是在售车型,一个是停产车型。再通过正则式找到所有的车型的链接。有一点要注意的是,正则式中年款是一行,一个年款下才是详细的款式,因此这一步要分两小步:取出整个年份多有的车款,再取出最终的车款并添加年份信息。默认页面是在售,因此还要找到停产车型的url并打开。这里用一个dic做容器标签为年款,内容为车款的url。打开停产车型并按照之前的步骤就可以搞定。第三步,逐个打开车款的url,寻找“车身外观”的链接,并打开,这个页面就是就可以找到我们需要的最终图片了。但是注意两点:1、这个页面有两种图片,一个是小图,一个是大图的url。所以还需要找到大图的url并且打开,然后在这个页面里寻找最终的图片链接,并下载。2.、这个页面可能会有“下一页”的情形出现,因此在打开大图链接之前最好把所有的下一页遍历一遍,存到一个list里一起处理。通过以上步骤,建立三级目录,最终经过漫长的等待,就可以得到汽车之家所有的车身外观的数据了。

   这是我第一次写网络爬虫,程序写的很简单,而且代码也码的比较凌乱。几个for循环搞定所有问题,没有用多线程、没有用类、没有用代理等等,好在汽车之家貌似也没有把我的IP拉黑。网页分为两类,这个相信大家都很明白,静态网页比较好处理,直接用urllib读取,而且速度也很快。动态网页嵌入了很多java的东西,有两种处理方式,一种自己分析java写的内容并进行处理,这个对我来说很有难度,一种是用浏览器内核打开,这种虽然慢但是很方便,这里我用的是phantomjs。虽然没有写多线程,但我还是希望能通过人工多进程的方式加快速度。因此我用PyInstaller将python代码编译成exe的格式,代码中利用getopt来输入参数,最后通过.bat文件作为参数输入以及启动。我的接口最终长成这样:autohome.exe --savePath=""  --brand="" --series="" --type=="",这样就可以从任意品牌任意车系任意车型继续了。最后吐槽下phantomjs,尽管在本机运转很顺利但是在其他机器上跑起来的概率就没那么高了。我的正则式则是现学现卖的,找了不少资料,最后觉得还是这里http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832260566c26442c671fa489ebc6fe85badda25cd000 讲的我能看得懂。最后说下我奇葩的python开发环境,我用的是vs2013+python插件。。。没错你没看错,我用的就是vs,这主要是方便caffe的python接口的使用。

    最后,爬虫的代码我放在github上了(https://github.com/abrams90/spidersAutoHomeImg.git),有兴趣的童鞋可以看看或者拿来用。欢迎大家帮忙改进哈~


    如转载请注明来自abrams的博客:http://blog.csdn.net/abrams90

2 0