zoukankan      html  css  js  c++  java
  • python2使用bs4爬取腾讯社招

    目的:获取腾讯社招这个页面的职位名称及超链接 职位类别 人数 地点和发布时间

    要求:使用bs4进行解析,并把结果以json文件形式存储

    注意:如果直接把python列表没有序列化为json数组,写入到json文件,会产生中文写不进去到文件,所以要序列化并进行utf-8编码后写入文件。

    # -*- coding:utf-8 -*-
    import requests
    from bs4 import BeautifulSoup as bs
    import json
    
    url = 'https://hr.tencent.com/position.php?'
    params = {
        'start':'10'
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    }
    
    # 获取腾讯社招某个页面的页面源码
    html = requests.get(url, params = params, headers = headers).text
    
    # 创建soup对象,使用lxml解析器
    soup = bs(html,'lxml')
    
    # 选取类名为odd和even的tr标签
    result1 = soup.select('tr[class="odd"]')
    result2 = soup.select('tr[class="even"]')
    # 列表拼接 l = [1,2] + [3,4],则列表l为[1,2,3,4]
    result = result1 + result2
    
    # 把数据存放在列表里面,列表的每个元素都为一个字典
    l = []
    data = {}
    for item in result:
        # 获取标签的文本内容
        job = item.find_all('a')[0].get_text().encode('utf-8')
        category = item.find_all('td')[1].get_text().encode('utf-8')
        number = item.find_all('td')[2].get_text().encode('utf-8')
        address = item.find_all('td')[3].get_text().encode('utf-8')
        public_time = item.find_all('td')[4].get_text().encode('utf-8')
        # 获取标签的属性值
        link = item.find_all('a')[0].attrs['href']
        fulllink = ('https://hr.tencent.com/' + link).encode('utf-8')
        data['job'] = job
        data['category'] = category
        data['number'] = number
        data['address'] = address
        data['public_time'] = public_time
        data['fulllink'] = fulllink
        l.append(data)
        # 原来中文写不到文件里面的报错原因,没把python列表序列化为json数组
        # with open('tencent.json','a') as f:
        #   f.write(str(data) + '
    ')
    
    # 方法1存储数据,上面字典的值不用先进行utf-8编码
    # 把数据以json文件形式存储
    # f = open('tencent.json','a')
    # 把python列表序转化为json对象。本地操作常用的是load dump。网络操作常用的loads dumps,而loads常用来把json格式转化为python格式,dumps把python格式序列为json格式
    # dictdata = json.dumps(l,ensure_ascii=False)
    # 把json对象写入json文件
    # f.write(dictdata.encode('utf-8'))
    # f.close()
    
    # 把数据存入tencent.json文件内
    json.dump(l,open('tencent.json','a'),ensure_ascii=False)
    
  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/silence-cc/p/9296187.html
Copyright © 2011-2022 走看看