爬虫项目————拉勾网数据采集

拉勾网数据采集

需求分析

知己知彼,方可百战不殆。在学习技术的时候我们往往面临太多选择而不知所措,可能是各个方面都有
涉猎,对某个领域没有深入研究,看似什么都会,真要让你做个什么东西的时候就显得捉肘见襟。如果
我们能从招聘职位所需的技能开始学习,便可练就一身硬功夫,为实战应用中打下良好的基础。
通过python抓取拉钩网的招聘详情,并筛选其中的技能关键词,存储到 excel 中。

职位需求页面分析

通过观察可以发现,拉勾网的职位页面详情是由 http://www.lagou.com/jobs/
PositionId.html 组成。
在这里插入图片描述

而 PositionId 可以通过分析 Json 的 XHR 获得。而红框里的职位描述内容是我们要抓取的数据。在这里插入图片描述
知道了数据的源头,接下来就按照常规步骤包装 Headers ,提交 FormData 来获取反馈数据。

PositionId 数据采集

注意:
拉勾网反爬虫做的比较严,请求头多添加几个参数才能不被网站识别。
我们找到真正的请求网址,发现返回的是一个 JSON 串,解析这个 JSON 串即可,而且注意是 POST
传值,通过改变 Form Data 中 pn 的值来控制翻页。
XHR : XMLHttpRequest 对象用于和服务器交换数据。
点击页面中的页数,比如第 2 页,我们可以在右边看到一个 POST 请求,这个请求里面包含了真实的
URL( 浏览器上的 URL 并没有职位数据,查看源代码就可以发现这一点)、 POST 请求的请求头
Headers 、 POST 请求提交的表单 Form Data (这里面包含了页面信息 pn 、搜索的职位信息 kd )

真实的URL获取

在这里插入图片描述

请求头信息

我们需要构造的请求头Headers信息,如果这里没有构造好的话,容易被网站识别为爬虫,从而拒绝访问请求。
在这里插入图片描述

表单信息

发送POST请求时需要包含的表单信息 Form Data。
在这里插入图片描述

返回的JSON数据

发现需要的职位信息在 content –> positionResult –> result 下,其中包含了工作地点、公司
名、职位等信息。 我们只需要保存这个数据就可以了。在这里插入图片描述

项目代码

配置文件 config.py 文件

# fake-useragent,可以伪装生成headers请求头中的User Agent值。
from fake_useragent import UserAgent
Host = 'www.lagou.com'
Origin = 'https://www.lagou.com'
Referer = 'https://www.lagou.com/jobs/list_python'
Connection = 'keep-alive'
Accept = 'application/json, text/javascript, */*; q=0.01'
ua = UserAgent(verify_ssl=False)

核心代码文件 lagou.py

import time
import requests
import logging
from config import *
import pprint
# 灵活配置日志级别,日志格式,输出位置
logging.basicConfig(level=logging.DEBUG,
                   format='%(asctime)s %(filename)s[line:%(lineno)d] %
(levelname)s %(message)s',
                   datefmt='%a, %d %b %Y %H:%M:%S',
                   filename='lagou.log',
                   filemode='w')
def getPositionIDPage(url_start, url_parse, page=1, kd='python'):
   """
         
获取PositionId列表所在页面, 返回的时json数据;
  :param url_start:   图形界面拉勾网职位信息的url地址;为了获取随机的session;
  :param url_parse: 真实返回json格式的url地址
  :param page: 访问的页数
  :param kd: 搜索的关键字
  :return: json数据格式的文本信息;
  """
   # 构造请求头(headers)
   headers = {
          'User-Agent': ua.random,
       'Host': Host,
       'Origin': Origin,
       'Referer': Referer,
       'Connection': Connection,
       'Accept': Accept
 
}
   # 构造表单
   data = {
   
       'first': False,
       'pn': str(page),
       'kd': kd
 
}
   try:
       # requests库的session对象能够帮我们跨请求保持某些参数,
       # 也会在同一个session实例发出的所有请求之间保持cookies。
       # 创建一个session对象
       session = requests.Session()
       # 用session对象发出get请求,设置cookies
       session.get(url_start, headers=headers, timeout=3)  # 请求首页获取cookies
       cookie = session.cookies  # 为此次获取的cookies
       # 用session对象发出另外一个post请求,获取cookies , 返回响应信息
       response = session.post(url=url_parse,
                               headers=headers,
                               data=data,
                             
)
       time.sleep(1)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值