爬虫综合大作业

  作业要求:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159

前言:

  据课上要求,需爬取数据并生成文章,故选择爬去实习僧的招聘数据进行分析。

获取数据:

  分析实习僧的地址可知,实习僧的地址组成为“域名”/“类别”/“页数”,此次我们爬取互联网相关的职业,故爬取的地址为:https://www.shixiseng.com/it/

  首先我们要获得所有列表页面的url:

#获取指定it页范围的url
def getItUrl(url,start,end):
    urls=[]
    for i in range(start,end):
        urls.append("{}/{}".format(url,i))
    return urls

 

  其次通过获取的页面url获取详情页url:

#获取it页的url
def getItListUrl(url):
    itList=[]
    res=requests.get(url)
    res.encoding='utf-8'
    soup=bs4.BeautifulSoup(res.text,'html.parser')
    alist=soup.select(".position-list .info1 a")
    for i in alist:
        itList.append(i['href'])
    return itList

 

  再然后通过详情页的url获取详情数据,由于实习僧有反字体爬取,故爬取后的数据需进行数字转码处理:

#获取职位详情
def getDetail(url):
    position={}
    headers={
             "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36",
            }
    res=requests.get(url,headers=headers)
    res.encoding='utf-8'
    chText=res.text
    #数字解码
    replace_dict = {
            '&#xe7ee': '0',
            '&#xf476': '1',
            '&#xe1e7': '2',
            '&#xf4b0': '3',
            '&#xf2bd': '4',
            '&#xe097': '5',
            '&#xf164': '6',
            '&#xf686': '7',
            '&#xe806': '8',
            '&#xf06b': '9',
                }
    for key, value in replace_dict.items():
        if key in chText:
             chText = chText.replace(key, value)
    soup = bs4.BeautifulSoup(chText, 'html.parser')
    try:
        position["jobName"]=soup.select(".new_job_name span")[0].text;
        position["jobDate"]=soup.select(".job_date span")[0].text;
        position["jobMoney"]=soup.select(".job_money")[0].text;
        position["jobPosition"]=soup.select(".job_position")[0].text;
        position["jobAcademic"]=soup.select(".job_academic")[0].text;
        position["jobWeek"]=soup.select(".job_week")[0].text;
        position["jobTime"]=soup.select(".job_time")[0].text;
        position["jobDetail"]=soup.select(".job_detail")[0].text.strip();
        position["jobCity"]=soup.select(".com_position")[0].text;
        position["comName"]=soup.select(".com-name")[0].text;
    except IndexError:
        return {}
    comDetails=soup.select(".com-detail span");
    try:
        position["comCity"]=comDetails[0].text;
    except IndexError:
        position["comCity"]=""
    try:
        position["comNum"]=comDetails[1].text[3:];
    except IndexError:
        position["comNum"]=""
    try:
        position["comClass"]=comDetails[2].text[3:];
    except IndexError:
        position["comClass"]=""
    #print(position)
    print("finish")
    return position

 

  数据爬取完成后需将数据存入csv文件中:

df=pd.DataFrame(itList)
df.to_csv("shixiceng.csv",encoding='utf-8')

 

  将数据存储到Sqlite3中:

shixisengdf = pd.read_csv('news.csv')
with sqlite3.connect('sqlitetest.sqlite') as db:
 shixisengdf.to_sql('data',con = db)

   总共爬取了5000条数据,爬取后的数据展示:

 

数据可视化:

  对数据进行词云处理,发现本科学历,学习能力强,责任心强是公司的第一选择。

 

 

 

  对最低学历进行分组,发现本科占率高达70%,而大专只有7.5%,由此可见,互联网行业对于学历的要求还是偏高的。

 对工作城市进行了排序处理,发现北京第一,上海第二,广州第三

 

posted @ 2019-05-09 21:48  GMUK  阅读(383)  评论(0编辑  收藏  举报