Python爬虫:异步数据抓取并保存到Excel

Python爬虫:异步数据抓取并保存到Excel

标签(空格分隔): Python 爬虫 异步


环境:Python 3.6Pycharm 2017.2.3Chrome 61.0.3163.100


======> 2018年3月3号 更新整理了一下代码 <======

  • 修改了post请求中的form-data没有生效的错误
  • 修改为可直接从程序外部传入参数,可获得任意职位,任意地区的职位信息,并以职位-城市命名文件

前言

刚接触了一下异步数据的抓取,所以试一下如何实现异步数据的抓取。
这次需要实现的是,在招聘网站拉勾网【网站链接】中爬出Python相关职位的一些基本信息,并且将基本信息保存至Excel表格中。


需要的一些知识点

  • AJAXAsynchronous JavaScript and XML(异步的 JavaScriptXML)。它不是新的编程语言,而是一种使用现有标准的新方法。它采用的是AJAX异步请求。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。因此就可以在不重新加载整个网页的情况下,对网页的某部分进行更新,从而实现数据的动态载入。
  • XHRXMLHttpRequest 对象用于和服务器交换数据。

开始动手吧

分析网页

打开拉勾网主页之后,我们在搜索框中输入关键字Python,以用来查找和Python相关的职位。在搜索结果的页面中,我们按照以下顺序操作可以发现。

–> 右键检查
–> 打开审查元素后默认打开的是Elements
–> 我们切换到Network标签,刷新一下网页会出现各种条目的请求
–> 因为该网站是异步请求,所以打开Network中的XHR,针对JSON中的数据进行分析。
XHR

–> 在审查元素中我们可以发现以下信息:

# 该页面的请求url 
Request URL:https://www.lagou.com/jobs/positionAjax.json?city=%E5%B9%BF%E5%B7%9E&needAddtionalResult=false&isSchoolJob=0
# 该页面的请求方法,需要提交表单数据(Form-data)
Request Method:POST
Form-data:  first: true
            pn: 1
            kd: python
--------------------------------
# Request Headers中的相关信息
包括Cookie、Referer、User-Agent等我们之后会用到的信息

代码

代码片段1-请求该网页
import requests     # 导入请求模块

url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E6%88%90%E9%83%BD&needAddtionalResult=false&isSchoolJob=0'
form_data = {
  'first': 'true',
             'pn': '1',
             'kd': 'python'}

def getJobList():
    res = requests.post(
        # 请求url
        url=url,
        # 填写表单数据
        data = form_data
    )
    result = res.json()     # 获取res中的json信息
    print(result)

getJobList()

运行结果:

{
  'success': False, 'msg': '您操作太频繁,请稍后再访问', 'clientIp': '113.14.1.254'}

出现这样他的结果,应该是拉钩网的反爬机制起了作用,所以此时就需要伪装成用户去访问,需要加入headers信息。

代码片段2-加入headers信息
import requests

url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city=%E6%88%90%E9%83%BD&needAddtionalResult=false&isSchoolJob=0'
form_data = {
  'first': 'true',
             'pn': '1',
             'kd': 'python'}
HEADERS = {
    # User-Agent(UA) 服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。也就是说伪装成浏览器进行访问
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
    # 用于告诉服务器我是从哪个页面链接过来的,服务器基此可以获得一些信息用于处理。如果不加入,服务器可能依旧会判断为非法请求
    'Referer': 'https://www.lagou.com/jobs/list_Python?px=default&gx=&isSchoolJob=1&city=%E5%B9%BF%E5%B7%9E'
}

def getJobs():
    res = requests.post(url=url, headers=HEADERS, data=form_data)
    result = res.json()
    print(result)

getJobs()

运行结果:

{
  'success': True, 'requestId': None, 'resubmitToken': None, 'msg': None, 'content': {
  'pageNo': 1, 'pageSize': 15, 'hrInfoMap': {
  '4067747': {
  'userId': 1944019, 'phone': None, 'positionName': 'HR', 'receiveEmail': None, 'realName': 'zp', 'portrait': None, 'canTalk': True, 'userLevel': 'G1'}, '4170140': {
  'userId': 7646331, 'phone': None, 'positionName': None, 'receiveEmail': None, 'realName': 'liuyaou', 'portrait': None, 'canTalk': True, 'userLevel': 'G1'}, '3887376': {
  
  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值