Python 爬虫专栏我的Python自学之路scrape

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

2017-04-26  本文已影响636人  loading_miracle

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

<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>

结果

过程 结果

总结

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

上一篇 下一篇

猜你喜欢

热点阅读