爬虫实战——爬取杭电就业信息网招聘信息

杭电宣讲会信息爬取

爬取内容: 宣讲单位,宣讲时间,所在学校,宣讲地点,单位简介等
项目需求

  1. 实现两层网页的信息爬取,并将爬取的信息进行整合保存到 excel 文件中。
    (1) 基础:爬取一个外层页中,所有内层页的信息
    (2) 进阶:爬取多个外层页中, 所有内层页的信息
  2. 每个题目中, 至少爬取上述给定爬取内容中的五项。
  3. 自学数据可视化方法,将爬取结果以曲线图、 柱状图等方式显示。
  4. 自学 scrapy 库,尝试将以上题目用 scrapy 框架实现
# -*- coding: utf-8 -*-
"""
Created on Sat Nov  2 20:29:39 2019

@author: 1
"""

import requests # 导入网页请求库
from bs4 import BeautifulSoup # 导入网页解析库
import pandas as pd
import json
import re

#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=1&_=1572698708166    第一页
#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=2&_=1572698708167    第二页
#http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start=3&_=1572698708168    第三页
#http://career.hdu.edu.cn/module/careers?menu_id=6438

#http://career.hdu.edu.cn/detail/career?id=career_talk_id 二级网页
# 发起请求
def start_requests(url):
    #print(url) # 查看在抓取哪个链接
    r = requests.get(url)
    return r.text

# 解析一级网页,获取career_talk_id列表
def get_id(text):
    #soup = BeautifulSoup(text, 'html.parser')
    list_id=[]
    content=json.loads(text)
    for item in content['data']:
        list_id.append(item['career_talk_id'])
    return list_id#返回序列

# 解析二级网页,获取公司简介信息
def parse_page(text):
    mydict={}
    soup = BeautifulSoup(text, 'html.parser')
    pattern=re.compile(r'[\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b\u4e00-\u9fa5\d+]')
    #data_name=soup.find('h1',class_="dm-text",style="font-weight:normal;").text.split('宣讲单位:')[1]
    data_name=pattern.findall(soup.find('h1',class_="dm-text",style="font-weight:normal;").text.split('宣讲单位:')[1])
    data_company=pattern.findall(str(soup.select('#data_details > div.main > div > div:nth-child(2) > div.dm-cont')))
    #div class="dm-cont" style="font-size:14px;line-height:22px;"
    data_time=soup.find_all('p',class_="dm-text")[0].text.split('宣讲时间:')[1]
    data_school=soup.find_all('p',class_="dm-text")[1].text.split('所在学校:')[1]
    data_place=soup.find_all('p',class_="dm-text")[2].text.split('宣讲地点:')[1]
    str_data=''.join(data_company)
    str_name=''.join(data_name)
    mydict['宣讲地点']=data_place
    mydict['公司简介']=str_data.replace('1422','')
    mydict['宣讲学校']=data_school
    mydict['宣讲单位']=str_name
    mydict['宣讲时间']=data_time
    return mydict#返回字典

#数据整理
def get_result():
    for i in range(1572698708166, 1572698708168):
        url = 'http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start={}&_={}'.format(i-1572698708165,i)
        text = start_requests(url)
        list_id= get_id(text) # 解析一级页面,获取二级页面的career_talk_id
        for career_id in list_id: # 解析二级页面 
            url_2='http://career.hdu.edu.cn/detail/career?id={}'.format(career_id)
            page = start_requests(url_2)
            mydict= parse_page(page)#dict的信息
            result_list.append(mydict)
    return result_list#返回列表    

#运行,可视化+写入excel
if __name__ == '__main__':
    result_list=[]
    result_list=get_result()
    df=pd.DataFrame(result_list)
    df['宣讲时间'].value_counts().plot(kind='bar')
    df.to_excel('data.xlsx')
 

最终得到data.xlsx和一个宣讲时间数量统计图(属实无聊,但是作业要做hhhhh)
爬虫实战——爬取杭电就业信息网招聘信息_第1张图片

你可能感兴趣的:(数据挖掘专栏)