zoukankan      html  css  js  c++  java
  • 爬取腾讯招聘官网

     

    1.爬取目标

    这次爬虫爬取的信息是腾讯官方招聘网站上的首页下的热招职位,如下图所示

    2.爬取步骤

    进入该页面下,观察该页面,我们爬取的信息就是下面我标出的信息页,信息页下面就是翻页区,不断翻页发现这些网页的链接后面有一定的规则

    每页的链接:http://hr.tencent.com/position.php?&start=?#a    注:?就是改变的位置

     

    使用requests模块获取页面信息:

    1 # 请求获取网站页面的信息(html代码)  网址:http://hr.tencent.com/position.php
    2 def load_request(number, items):
    3     # User-Agent: 请求报头,用来把程序伪装成浏览器
    4     headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
    5     # 使用requests的get请求服务器获取信息
    6     request = requests.get('http://hr.tencent.com/position.php?&start='+str(number)+"#a", headers=headers)
    7     # 取出返回信息的文本信息(html代码)
    8     html = request.text

    使用BeautifulSoup解析库对获取的页面代码进行解析,获取的页面信息其实就是上面第二张图的一页,打开浏览器的检查观察页面HTML代码的规则,每一条职位信息都在类名为even或odd的td标签内,先用select方法提取每一条信息的职位信息,再循环取每一条信息里的特定信息:

    select方法使用: https://www.cnblogs.com/yizhenfeng168/p/6979339.html(转载)

     1 # 网站代码解析
     2 def parser(html, items):
     3     # soup是一个BeautifulSoup对象,把HTML代码转换成树形结构存储在soup中
     4     soup = BeautifulSoup(html, 'html.parser')
     5     # 使用BeautifulSoup中的select方法提取HTML代码中的信息
     6     even = soup.select('.even')
     7     odd = soup.select('.odd')
     8     str = odd + even   # 字符串拼接
     9     for item in str:   # for循环迭代(遍历)
    10         # _item为一个字典,存储一个工作职位的信息
    11         _item = {}
    12         # 职位名称
    13         _item['name_of_work'] = item.select('td')[0].get_text()
    14         # 职位链接
    15         _item['link_of_work'] = 'http://hr.tencent.com' + item.select('td a')[0].attrs['href']
    16         # 职位类别
    17         _item['category_of_work'] = item.select('td')[1].get_text()
    18         # 工作地点
    19         _item['where_of_work'] = item.select('td')[3].get_text()
    20         # 发布时间
    21         _item['time_of_release'] = item.select('td')[4].get_text()
    22         # 所需人数
    23         _item['number_of_person'] = item.select('td')[2].get_text()
    24         # 把以上信息添加到列表中
    25         items.append(_item)

    最后写主函数,把爬取的信息以json格式存储,程序的所有代码如下:

     1 # __author__ = 'wyb'
     2 # date: 2018/1/9
     3 
     4 from bs4 import BeautifulSoup  # 导入BeautifulSoup解析库
     5 import requests    # 请求网站获取网页数据
     6 import json        # python中的一种轻量级的数据交换格式
     7 
     8 # import sys         # python中的操作系统模块
     9 # sys.getdefaultencoding()
    10 
    11 # 网站代码解析
    12 def parser(html, items):
    13     # soup是一个BeautifulSoup对象,把HTML代码转换成树形结构存储在soup中
    14     soup = BeautifulSoup(html, 'html.parser')
    15     # 使用BeautifulSoup中的select方法提取HTML代码中的信息
    16     even = soup.select('.even')
    17     odd = soup.select('.odd')
    18     str = odd + even   # 字符串拼接
    19     for item in str:   # for循环迭代(遍历)
    20         # _item为一个字典,存储一个工作职位的信息
    21         _item = {}
    22         # 职位名称
    23         _item['name_of_work'] = item.select('td')[0].get_text()
    24         # 职位链接
    25         _item['link_of_work'] = 'http://hr.tencent.com' + item.select('td a')[0].attrs['href']
    26         # 职位类别
    27         _item['category_of_work'] = item.select('td')[1].get_text()
    28         # 工作地点
    29         _item['where_of_work'] = item.select('td')[3].get_text()
    30         # 发布时间
    31         _item['time_of_release'] = item.select('td')[4].get_text()
    32         # 所需人数
    33         _item['number_of_person'] = item.select('td')[2].get_text()
    34         # 把以上信息添加到列表中
    35         items.append(_item)
    36 
    37 # 请求获取网站页面的信息(html代码)  网址:http://hr.tencent.com/position.php
    38 def load_request(number, items):
    39     # User-Agent: 请求报头,用来把程序伪装成浏览器
    40     headers = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Mobile Safari/537.36"}
    41     # 使用requests的get请求服务器获取信息
    42     request = requests.get('http://hr.tencent.com/position.php?&start='+str(number)+"#a", headers=headers)
    43     # 取出返回信息的文本信息(html代码)
    44     html = request.text
    45     parser(html, items)
    46 
    47 if __name__ == "__main__":
    48     number = 0  #
    49     items = []  # 列表
    50     swith = True
    51     while swith:
    52         if number >= 50:
    53             # swith相当于一个开关请示,如果请求发出,爬虫启动
    54             swith = False
    55         load_request(number, items)
    56         # 一次性爬取10页数据
    57         number += 10
    58     content = json.dumps(items, ensure_ascii=False)
    59     # 数据读入json中
    60     with open('txzhaoping.json', 'w',encoding='utf-8') as f:
    61         f.write(content)
    View Code

    运行程序,结果如下:

  • 相关阅读:
    request.setCharacterEncoding("utf-8");
    JSTL的foreach循环遍历
    EL表达式的查找范围
    Unity_图形学之_shader_学习笔记(一)
    Unity_AssetBundle笔记_(一)(俗称AB包_个人笔记欢迎指正)
    Unity C#笔记 协程详解(转)
    解决方案_And_学习链接_笔记
    Unity_一些Unity内部的重要设置
    C#_异常处理
    Unity3D_Resources封装(ResourcesManager 类)
  • 原文地址:https://www.cnblogs.com/wyb666/p/8313192.html
Copyright © 2011-2022 走看看