放养的小爬虫-拉钩网半智能整站小爬虫

放养的小爬虫--拉钩网半智能整站小爬虫

我是一只放养的小爬虫--拉钩网半智能整站小爬虫

笔者声明:只用于学习交流,不用于其他途径。源代码已上传github。githu地址:https://github.com/Erma-Wang/Spider

Python写爬虫的感觉那叫一个爽!100行代码不到,爬取整站,貌似这样下去拉钩还不加强服务器么?下面看看半智能的效果,程序员嘛。。。不做外壳了。。。我只是一只放养的小爬虫,拉钩看到就说对不起啰!!。哈哈,下面看图:
放养的小爬虫-拉钩网半智能整站小爬虫

输入命令后,小爬虫开始工作了!
放养的小爬虫-拉钩网半智能整站小爬虫

爬去结束后小爬虫自动生成了一个XLS文件,一般的excel就能打开了
放养的小爬虫-拉钩网半智能整站小爬虫
最后看看成果:
放养的小爬虫-拉钩网半智能整站小爬虫

好了,效果看完了,看看小爬虫怎么制造出来的吧。。。
其中也没有什么难点的技术,不过pandas很值得学习,给个学习链接http://pandas.pydata.org,挺不错的。。下面贴一下代码吧。。。github上面也有。

# -*- coding:utf-8 -*-

import re,json
from urllib import request
from pandas import DataFrame,Series
import pandas as pd

__author__ = "放养的小爬虫"

# 处理字符串的函数
def ProcessingString(string):
string = string.encode('utf-8')
string = str(string).replace(r'\x','%').replace(r"'","")
string = re.sub('^b','',string)
return string

# 计算总共页数
def SearchPageCount(position, city):
i = 0
type = 'true'
url = 'http://www.lagou.com/jobs/positionAjax.json?city='+city+'&first='+type+'&kd='+position+'&pn='+str(i+1)
with request.urlopen(url) as f:
    data = f.read()
    count = int(json.loads(str(data,encoding='utf-8',errors='ignore'))["content"]["totalPageCount"])
    totalCount = int(json.loads(str(data,encoding='utf-8',errors='ignore'))["content"]["totalCount"])
    print('本次搜索到%d个职位'%totalCount)
return count

def LaGouSpiderWithKeyWord(position, city):
positionTemp = ProcessingString(position)
cityTemp = ProcessingString(city)
# 获取总共页数
pageCount = SearchPageCount(positionTemp,cityTemp)

for i in range(0,pageCount):
    if i ==0 :
        type='true'
    else:
        type='false'
    url = 'http://www.lagou.com/jobs/positionAjax.json?city='+cityTemp+'&first='+type+'&kd='+positionTemp+'&pn=1'
    data = request.urlopen(url).read()
#     读取Json数据
    jsondata = json.loads(str(data,encoding='utf-8',errors='ignore'))['content']['result']
    for t in list(range(len(jsondata))):
        jsondata[t]['companyLabelListTotal']='-'.join(jsondata[t]['companyLabelList'])
        jsondata[t].pop('companyLabelList')
        if t == 0:
            rdata=DataFrame(Series(data=jsondata[t])).T
        else:
            rdata=pd.concat([rdata,DataFrame(Series(data=jsondata[t])).T])
    if i == 0:
        totaldata=rdata
    else:
        totaldata=pd.concat([totaldata,rdata])
    print('正在解析第%d页...'%i)
totaldata.to_excel('lagou.xls',sheet_name='sheet1')

if __name__ == "__main__":
position = input('请输入你要爬取的职位')
city = input('请输入你要爬取的城市')
LaGouSpiderWithKeyWord(position, city)

作者声明:只做学习交流,不用于其他途径!!!

13楼wdwwtzy
嗯 13楼正解,c#也有很好用的库,基本上也就这点代码量
12楼jerry_0824
~感谢分享~
11楼zhp1254
C:\Users\Administratorgt;python C:\Users\Administrator\Desktop\lagou.py,position:php,Traceback (most recent call last):, File quot;C:\Users\Administrator\Desktop\lagou.pyquot;, line 60, in lt;modulegt;, position = input(#39;position:#39;), File quot;lt;stringgt;quot;, line 1, in lt;modulegt;,NameError: name #39;php#39; is not defined,,C:\Users\Administratorgt;,,神马状况,,当input改成raw_input后, string = string.encode(#39;utf-8#39;),UnicodeDecodeError: #39;ascii#39; codec can#39;t decode byte 0xb1 in position 0: ordinal,not in range(128),,表示很心塞
Re: Erma_Jack
@zhp1254,NameError: name #39;php#39; is not defined,, 未初始化的变量php
10楼胖子黎
其实其它语言写这个爬虫也和你的这个代码量差不多的。。。
Re: Erma_Jack
@胖子黎,这只是简单的小爬虫,可是要是做复杂一点儿的爬虫我还是会用Python,毕竟第三方库好用#128516;
9楼刘吉祥
升级后解决了,爬成功了,谢谢了,今天刚开始学python,6年c#程序员打算转到数据分析,数据挖掘方向,以后多向你学习。
Re: Erma_Jack
@刘吉祥,客气,相互学习,#128516;
8楼whatbeg
这个是用了框架么还是纯自己写的?
Re: Erma_Jack
@whatbeg,爬取的数据是json,处理json就好,不需要用Scrapy一类的框架。。。
7楼wingor
干得漂亮
Re: Erma_Jack
@wingor,#128540;#128540;
6楼刘吉祥
pandas如何安装呢
Re: Erma_Jack
@刘吉祥,记得之前我也装不上,好像是报错pip版本过低,我把pip升级到8.1后装上的,不知道您的情况是不是这样,我在Mac下python3装一些库有时也是挺复杂的!
Re: Erma_Jack
@whatbeg,在这里叻!!最开始就导入了模块。。。,from pandas import DataFrame,Series,import pandas as pd,,if t == 0:, rdata=DataFrame(Series(data=jsondata[t])).T, else:, rdata=pd.concat([rdata,DataFrame(Series(data=jsondata[t])).T]),,pandas这儿用来做一些数据的处理,,,
Re: whatbeg
@Erma_Jack,哦哦,,,
4楼45#176;的视角
非常不错,感谢分享 (来源:合仔茶端)
Re: Erma_Jack
@45#176;的视角,☺
3楼刘吉祥
你好,楼主,我的也是提示pip版本过低,我现在在安装anaconda试一试,不行的话就升级下pip版本试下。
Re: Erma_Jack
@刘吉祥,好的,pip要是升级后都还报错就把错误贴出来吧,看看能不能帮您解决。
2楼卓酷
拉钩表示:终于知道为什么服务器老崩溃了。。。。。。。。。。。
Re: Erma_Jack
@卓酷,#128540;#128540;,拉钩,我不是故意的~
1楼XXXiao
哈哈,不错不错,收藏了~