python爬虫——拉钩网职位信息

记得在前一段时间由于需要并且是第一次接触爬虫,没有成功获取到数据,了解爬虫一段时间之后,再次爬取拉钩网职位信息,本此采用单线程爬虫,之后会发布scrapy写法。

  • 获取的主要字段:
    • 职位名称
    • 公司名称
  • 城市
  • 公司规模
  • 公司类型
  • 月薪
  • 行业领域
  • firstType
  • secondType
  • 工作经历
  • 学历

<strong>首先,输入python工程师进行搜索,选择城市之后发现url并未发生改变,通过抓包工具抓到了返回的json数据,这个时候我们就要考虑怎么去构造URL,下边是抓包截图</strong>

抓包分析

<strong>明白了数据的加载方式,接下来就要分析它所携带的参数和请求方式</strong>

url和请求方式
get请求携带数据和post提交的数据

<em>从上图我们可以了解到URL及其携带的参数,那么接下来的工作就好办了,我们只要传递相对应的参数就可以拿到返回的json串,具体构造方式看之后的分析,因为还牵扯到页码的分析</em>
<strong>搞明白了数据的加载的方式以及怎么构造URL,接下来就好考虑不同的职位、城市以及对应的分页问题</strong>

职位+页码(1)+地点(北京)
第二页

<em>在相同地点点击下一页之后只有<strong>pn</strong>发生了改变,所以很显然,<strong>pn</strong>控制分页问题,接下来我们尝试一下更换地点,与上图进行对比看一下哪些参数变化了

职位+地点(上海)

从上图可以看出更改地点之后<strong>city</strong>发生了变化,所以<strong>city</strong>控制城市,那么很显然<strong>kd</strong>控制职位切换</em>
<strong>整明白了每个参数的含义,接下来我们就要考虑怎么找到到一个城市关于这个职位划分的总页数,从下图我们可以看到一个职位在不同城市的总页数是不同的</strong>

python工程师+上海
python工程师+北京

<strong>通过上边的一些介绍,接下来开始讲解每一部分的URL每一部分的参数的获取和构造完整的URL。
首先,职位和城市我们就没必要从网页上拿,可以自己存一个列表,然后遍历,那么就重点说一下总页数的获取

总页数
            soup = BeautifulSoup(response.text, 'lxml')
            pages = soup.find('span', {'class': 'span totalNum'}).get_text()

上边说明了总页数的位置及获取方法,接着说一下 职位+城市+页码的变化整个的构造方法(城市主要是拉钩网13个常用城市,先列两个关于python的职位)</strong>

#获取相关职位总页数
def get_total_page():
    kd = ['python工程师','python数据分析']
    city = ['北京','上海','深圳','广州','杭州','成都','南京','武汉','西安','厦门','长沙','苏州','天津']
    urls_kd = ['https://www.lagou.com/jobs/list_{}?px=default&city='.format(one) for one in kd]
    for urls in urls_kd:
        urls_city = [urls+one for one in city]
        for url in urls_city:
            response = requests.get(url, headers=headers, cookies=cookies)
            location = url.split('&')[-1].split('=')[1]
            key = url.split('/')[-1].split('?')[0].split('_')[1]
            soup = BeautifulSoup(response.text, 'lxml')
            pages = soup.find('span', {'class': 'span totalNum'}).get_text()
            print '职业:{}获取城市{}'.format(key,location)
            create_url(pages,location,key)
#构造URL
def create_url(pages,city,kd):
    for i in range(1,int(pages)+1):
        url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false'.format(city)
        get_data(url,i,kd)
#获取详细数据写入csv文件
def get_data(url,i,kd):
    print '第{}页数据'.format(i)
    formdata = {
        'first': 'true',
        'pn': i,
        'kd': kd
    }
    #注意这里是post请求
    response = requests.post(url,headers=headers,cookies=cookies,data=formdata)

<strong>以上为核心代码,剩余的就是解析json数据和写文件了,就不一一列出来了</strong>

结果

过程
结果

总结

  • <strong>1遇到的问题

  • 之前访问该网站一直ip被封,后来就想着用代理ip,其实没必要这么麻烦,只需要访问的时候加上cookie就可以了,至少我现在访问这些职位和城市没出现ip被封的情况。

  • 写入csv文件出现多一行空行的问题——解决办法
    Python中的csv的writer,打开文件的时候,要小心,
    要通过binary模式去打开,即带b的,比如wb,ab+等
    而不能通过文本模式,即不带b的方式,w,w+,a+等,否则,会导致使用writerow写内容到csv中时,产生对于的CR,导致多余的空行。

  • 2 感悟

  • 对一个网页的爬取的关键点在于怎么去找到这些数据的准确位置,而这个前提是了解URL构造,参数、以及请求方式,整明白这些就成功了一大半,对于后边数据的提取就是一些常规的思路

  • 单线程总体来说是比较慢的,之后改进加多线程或者用scrapy框架爬取数据

以上就是关于requests爬取拉钩网的一个简单的思路,有问题的可以留言或者评论一块探讨

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容