GIS:带你用Python找工作!(一)

作为一名学gis的小白,初学Python总想爬点与gis相关的数据,梦想将gis与Python完美结合,成为一名会编程的giser,然后走上人生巅峰,一夜暴富,嫁给高富帅…奈何理想很丰满,现实很骨感,看到师兄师姐有转行的,有继续深造的,还有没找到工作的,内心慌得不行,于是就想爬一下gis招聘岗位,了解一下行情,废话不多说,进入正题。

寻找目标网站

这次找的是前程无忧网站,看了好几个网站,这个网站的gis招聘岗位最多了,其他网站gis岗位都比较少,数据少就没有说服力啊,拉勾网gis岗位倒是不少,但是人家反爬措施做的太到位了,我这个Python小白破解不了啊,还是老老实实找个好爬一点的网站吧,网站链接如下:
前程无忧gis全国招聘岗位
链接稍微有点长,但是没关系,很多参数我们不用关心。F12键打开浏览器开发者工具,可以看到使用的是get请求,而且XHR中没有内容,证明不是Ajax加载的,研究了一下,这个网站也没有啥反爬措施,所以只需要解析页面,常规爬取就可以了
对对对

解析网页

先简单看一下,每个页面有50条数据,一共有99页,数据量还算不错,但是我们要爬取的数据并不是在这一页,而是点开招聘岗位,进入详情页。


这里面有我们需要的数据,这次我爬取的是岗位名称,所述公司,工作地点,月薪,也就是页面左上方这一块,所以我们爬取的时候要先获取详情页的url,然后再解析详情页,获得数据。
大地
had
由于一共有99页,所以要做翻页处理,这就需要观察一下不同页面URL的变化了
https://search.51job.com/list/000000,000000,0000,00,9,99,gis,2,1.html 第一页
https://search.51job.com/list/000000,000000,0000,00,9,99,gis,2,2.html 第二页
https://search.51job.com/list/000000,000000,0000,00,9,99,gis,2,3.html 第三页
这里我只截取了url的前面部分,因为后面参数是不变化的,所以不用考虑,这个网站翻页做的也比较简单,只看一眼,就知道咋回事了,只是变化了html前面的一个字符串,就完成了翻页效果。
接下来需要看一下HTML源代码,找到详情页的url链接,每一条岗位信息都在class=‘el’的div标签中,url链接在子标签a的href属性中,解析完页面,就可以撸代码了。
在这里插入图片描述

撸代码

大概流程:使用request获取html页面,然后用xpath解析网页,并将数据保存到Excel表中

import requests
from lxml import etree            #使用xpath解析网页
from xlrd import open_workbook         #将数据存储到Excel中
from xlutils.copy import copy
 
 #向网页发起get请求,得到response响应,获取源网页,以下代码可作为通用代码
def getHTMLext(url):
    try:
        kv = {'user-agent':'Mozilla/5.0'}
        r=requests.get(url,headers = kv)    #这里网页没有设置反爬,所以不需要使用代理ip或者cookies,直接提交就行了
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return '产生异常'

#获取每条招聘信息的url链接,然后解析详情页,爬取数据
def getAllUrl(html):
    try:
        selec= etree.HTML(html)
        url = selec.xpath('//div[@class ="el"]/p[1]/span/a/@href')   #获取url链接
        list =[]
        for u in url:
            r= getHTMLext(u)        #调用getHTMLext()函数返回详情页html
            selector = etree.HTML(r)   #使用xpath解析网页
            position = selector.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/h1/@title')
            company = selector.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[1]/a[1]/@title')
            salary = selector.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/strong/text()')
            adress = selector.xpath('/html/body/div[3]/div[2]/div[2]/div/div[1]/p[2]/@title')
            list.append([str(position),str(company),str(salary),str(adress)])   #将岗位名称、公司、薪水等数据保存在list列表中
        print('正在写入Excel中......')
        path = r'E:\pachong result\gis.xls'        #以下部分将爬取数据保存到Excel中
        rexcel = open_workbook(path)        # 用wlrd提供的方法读取一个excel文件
        rows = rexcel.sheets()[0].nrows       # 用wlrd提供的方法获得现在已有的行数
        excel = copy(rexcel)                  # 用xlutils提供的copy方法将xlrd的对象转化为xlwt的对象
        table = excel.get_sheet(0)       # 用xlwt对象的方法获得要操作的sheet
        row = rows
        for product in list:
            table.write(row, 0, product[0].replace('[', '').replace(']', '').replace("'", ''))
            table.write(row, 1, product[1].replace('[', '').replace(']', '').replace("'", ''))
            table.write(row, 2, product[2].replace('[', '').replace(']', '').replace("'", ''))
            table.write(row, 3, product[3].replace('[', '').replace(']', '').replace('\\xa0\\xa0', '').replace("'", ''))
            row += 1
        excel.save(path)
    except Exception as e:
        print(e)

#定义主函数
def main():
    for i in range(1,100):    #一共99页,这里使用for循环,达到翻页效果
        print('正在获取第' + str(i) + '页url.....')
        start_url = 'https://search.51job.com/list/000000,000000,0000,00,9,99,gis,2,'
        last_url = '.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
        all_url = start_url + str(i) + last_url
        html = getHTMLext(all_url)     #调用getHTMLext(all_url)函数获取每个岗位的详情链接
        getAllUrl(html)                           #调用  getAllUrl( html )  解析详情页,获取数据,保存至Excel中
        print('第'+str(i)+'页''写入excel成功')
main()

虽然中间经历了诸多坎坷,最终还是把数据给爬下来了,太不容易了…
在这里插入图片描述
保存到Excel中的数据就长这样子,接下来就要进行数据清洗了,比如去除重复数据(爬取过程中可能会出错),整理数据等等,这部分用Python也能完成,但是本人学艺不精,而且爬下来的数据量也不是太大,所以就直接在Excel中处理了,处理过程很简单,毕竟Excel功能也很强大,处理过后一共有4351条数据,至此,数据爬取部分已全部完成。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42164004/article/details/88965335
今日推荐