基于json文本爬取杭电宣讲会的信息

这是我们学院短学期的一个大作业了(嘿嘿希望能帮助到杭电通信的同学),其中使用json文本来爬取的,比较不常见,所以记录下来跟大家一起分享!
看一下杭电宣讲会的网站(http://career.hdu.edu.cn/module/careers)
在这里插入图片描述

  • 先来说一下项目目标:
  • 宣讲单位,宣讲时间,所在学校,宣讲地点,单位简介
  • 项目需求:
  • 实现两层网页的信息爬取,并将爬取的信息进行整合保存到 excel 文件中。
    (1) 基础:爬取一个外层页中,所有内层页的信息
    (2) 进阶:爬取多个外层页中,所有内层页的信息
    每个题目中,至少爬取上述给定爬取内容中的五项。
    自学数据可视化方法,将爬取结果以曲线图、柱状图等方式显示。
  • 代码
import requests
import json
import parsel
import xlwt
def main():
    wurl = 'http://career.hdu.edu.cn/module/getcareers?start_page=1&k=&panel_name=&type=inner&day=&count=15&start='
    datalist = getdata(wurl)
    savapath = r'F:\pycharm\project1\杭电宣讲会.xls'
    saveData(datalist, savapath)

def askurl(wurl):
    # headers = {
        # 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.9 Safari/537.36'}


    res = requests.get(wurl)
    res = json.loads(res.text)  #读取json文本
        # print(res)
        # print(res['data'][0]['company_name'])
    return res
def gethtml(url):
    res = requests.get(url)
    html = res.text
    return html
def getid(wurl):
    id = []
    for i in range(1,int(pages)+1):
        sumurl = wurl + str(i)   #所有页面的url
        res = askurl(sumurl)
        for company in res['data']:
            id.append(company['career_talk_id'])#得到所有的id

    return id
def getplace(wurl):
    place = []
    for i in range(1,int(pages)+1):
        sumurl = wurl + str(i)   #所有页面的url
        res = askurl(sumurl)
        for company in res['data']:
            place.append(company['address'])#得到所有的name
    # print(place)
    return place
def getdata(wurl):
    id = getid(wurl)
    place = getplace(wurl)
    datalist = []
    for j in range(0,int(pages)*15):
        datas = []
        nurl = 'http://career.hdu.edu.cn/detail/online_career?id='  #内网页url
        baseurl = nurl + id[j]
        html = gethtml(baseurl)
        data = parsel.Selector(html)
        company = data.xpath('normalize-space(//h1[@class="dm-text"]/text())')[0].get()#宣讲单位
        datas.append(company[5:])
        # print(company[5:])
        time = data.xpath('//p[@class="dm-text"]/text()')[0].extract()  #宣讲时间
        datas.append(time[5:])
        # print(time[5:])
        school = data.xpath('//p[@class="dm-text"]/text()')[1].extract()    #所在学校
        datas.append(school[5:])
        # print(school[5:])
        datas.append(place[j])  #宣讲地点
        counts = data.xpath('//p[@class="dm-text"]/text()')[2].extract()    #浏览量
        datas.append(counts[4:])
        info = data.xpath('normalize-space(//div[@class="tab-content"]//p/text())').extract()[0]    #单位简介
        if len(info) != 0:
            # print(info)
            datas.append(info)
        else:
            info = data.xpath('normalize-space(//div[@class="tab-content"]//div[@class="dm-cont"]/text())').extract()[0]
            # print(info)
            datas.append(info)
        datalist.append(datas)
    return datalist

def saveData(datalist, savapath):
    workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)  # 创建对象
    worksheet = workbook.add_sheet('TOP250', cell_overwrite_ok=True)  # 创建工作表
    col = ('宣讲单位', '宣讲时间', '所在学校', '宣讲地点', '浏览量', '单位简介')
    for j in range(0, 6):
        worksheet.write(0, j, col[j])  # 列名
    for i in range(0, int(pages)*15):
        data = datalist[i]
        print("第%d条" % (i + 1))
        for j in range(0, 6):
            worksheet.write(i + 1, j, data[j])  # 数据
    workbook.save(savapath)
if __name__ == '__main__':
    pages = input("请输入需要查询的页码:")
    main()
    print("爬取完成")
  • 数据可视化就留着你们自己做了
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值