爬虫---爬取拉钩信息网

  今天不知道写点什么,想到金9银10了写一篇抓取拉勾网我们软件测试工程师的薪资~~

爬取拉勾网职业信息

分析网站信息

1、打开拉勾网,输入我们想要查找的职位

2、通过抓包工具或者开发者工具查看请求数据

发现是请求地址:https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false

通过post形式请求的,请求参数也可以看到

4、分析页面数据

通过分析,数据已json的格式存在preview中

怎么获取数据呢? 我们可以通过获取返回的json内容,通过json的内容找到我们想要的数据

3、通过requests发送post请求

首先直接请求requests拉勾网信息,添加请求头。

发现会提示请求频繁无法获取网站信息,那这样怎么去搞?

前面小编写过一个通过session会话请求的数据,那么我们今天来试试

首先请求我们网页显示的信息获取cookies值,携带这网页的cookies再去请求我们需要爬取的url

import requests
# 请求地址
url = ‘https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false‘
# 请求头
headers = {
            ‘Accept‘: "application/json, text/javascript, */*; q=0.01",
            ‘User-Agent‘: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
            ‘Referer‘:‘https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput=‘
    }
# 请求参数
form_data = {
            ‘first‘: ‘true‘,
            ‘pn‘: 1,
            ‘kd‘: ‘软件测试工程师‘
    }
# 导入session回话
s = requests.session()
# 请求页面地址获取cookies
url_list = ‘https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput=‘
s.get(url_list, headers=headers)
cookie = s.cookies
# 携带cookies值继续请求
response = s.post(url, data=form_data, headers=headers,cookies=cookie)
job_json = response.json()
# 获取json数据
print(job_json)

通过观察返回的json数据我们得知我们需要的数据都在result数据里面,那么通过json的方式我们可以提取出来,放到一个列表中,方便稍后我们写入csv文件中

csv_data = []
    for i in job_list:
        job_info = []
        job_info.append(i[‘positionName‘])  # 职位
        job_info.append(i[‘companyShortName‘])  # 公司
        job_info.append(i[‘salary‘])    # 薪资
        job_info.append(i[‘education‘])  # 学历
        job_info.append(i[‘district‘])  # 位置
        job_info.append(i[‘workYear‘])  # 工作经验要求
        job_info.append(i[‘positionAdvantage‘])  # 福利待遇
        csv_data.append(job_info)

4、数据写入csv文件中

写入csv文件写过很多次了,基本上都是一样的

csvfile = open(‘软件职业.csv‘, ‘a+‘,encoding=‘utf-8-sig‘,newline=‘‘)
    writer = csv.writer(csvfile)
    writer.writerows(csv_data)
    csvfile.close()

5、构建分页列表,爬取全部数据

通过观察分页的控制是在form_data中,我们呢就模拟分页内容,爬取全部数据

all = []
    for page_num in range(1, 30):
        result = data(page=page_num)
# 获取一共多少个数据
        all += result
        print(‘已抓取{}页, 总职位数:{}‘.format(page_num, len(all)))

完整代码

import requests
# 请求地址
url = ‘https://www.lagou.com/jobs/positionAjax.json?city=%E4%B8%8A%E6%B5%B7&needAddtionalResult=false‘
# 请求头
headers = {
            ‘Accept‘: "application/json, text/javascript, */*; q=0.01",
            ‘User-Agent‘: "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
            ‘Referer‘:‘https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput=‘
    }
# 请求参数
form_data = {
            ‘first‘: ‘true‘,
            ‘pn‘: 1,
            ‘kd‘: ‘软件测试工程师‘
    }
# 导入session回话
s = requests.session()
# 请求页面地址获取cookies
url_list = ‘https://www.lagou.com/jobs/list_%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88?city=%E4%B8%8A%E6%B5%B7&cl=false&fromSearch=true&labelWords=&suginput=‘
s.get(url_list, headers=headers)
cookie = s.cookies
# 携带cookies值继续请求
response = s.post(url, data=form_data, headers=headers,cookies=cookie)
job_json = response.json()
csv_data = []
for i in job_list:
     job_info = []
     job_info.append(i[‘positionName‘])  # 职位
     job_info.append(i[‘companyShortName‘])  # 公司
     job_info.append(i[‘salary‘])    # 薪资
     job_info.append(i[‘education‘])  # 学历
     job_info.append(i[‘district‘])  # 位置
     job_info.append(i[‘workYear‘])  # 工作经验要求
     job_info.append(i[‘positionAdvantage‘])  # 福利待遇
     csv_data.append(job_info)  # 写入列表中
print(csv_data)
csvfile = open(‘软件职业.csv‘, ‘a+‘,encoding=‘utf-8-sig‘,newline=‘‘)
writer = csv.writer(csvfile)
writer.writerows(csv_data)
csvfile.close()
return csv_data
if __name__ == ‘__main__‘:
    a = [(‘职位‘,‘公司‘,‘薪资‘,‘学历‘,‘位置‘,‘工作经验要求‘,‘福利待遇‘)]
    csvfile = open(‘软件职业.csv‘, ‘a+‘,encoding=‘utf-8-sig‘,newline=‘‘)
    writer = csv.writer(csvfile)
    writer.writerows(a)
    csvfile.close()
    all = []
    for page_num in range(1, 30):
        result = data(page=page_num)
        all += result
        print(‘已抓取{}页, 总职位数:{}‘.format(page_num, len(all)))
    # 控制时间,防止网站认为爬虫
        time.sleep(15)  

抓取的结果:

看到我们测试工资这么高,好心动,~~~~~

注意,不要请求太过于频繁,会认为爬虫封IP的。

如果感觉喜欢的话,右下角点个关注~~~

原文地址:https://www.cnblogs.com/qican/p/11283954.html

时间: 2024-10-08 06:35:56

爬虫---爬取拉钩信息网的相关文章

爬取拉钩全站的职位信息

爬虫学习到今天也告一段落了,利用一个项目把自己这几个月的所学的知识来做一次总结 项目所需要的知识比较全面,很适合练手, 一 程序目的 爬取拉钩全站的职位信息存入mysql和mongodb中 二 所用到的方法 一 利用selenium登录拉钩取得cookies 二 利用redis保存selenium登录拉钩取得cookies信息,维护一个cookie池 三 爬取西刺等免费IP网站,并用redis维护一个IP池 四 利用flask把cookies和ip分别映射到网页中,用requsets得到. 五

21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)

6.1.爬取第一页的职位信息 第一页职位信息 from selenium import webdriver from lxml import etree import re import time class LagouSpider(object): def __init__(self): self.driver = webdriver.Chrome() #python职位 self.url = 'https://www.lagou.com/jobs/list_python?labelWords

ruby 爬虫爬取拉钩网职位信息,产生词云报告

思路:1.获取拉勾网搜索到职位的页数 2.调用接口获取职位id 3.根据职位id访问页面,匹配出关键字 url访问采用unirest,由于拉钩反爬虫,短时间内频繁访问会被限制访问,所以没有采用多线程,而且每个页面访问时间间隔设定为10s,通过nokogiri解析页面,正则匹配只获取技能要求中的英文单词,可能存在数据不准确的情况 数据持久化到excel中,采用ruby erb生成word_cloud报告 爬虫代码: require 'unirest' require 'uri' require '

CrawlSpider爬取拉钩

CrawlSpider继承Spider,提供了强大的爬取规则(Rule)供使用 填充custom_settings,浏览器中的请求头 from datetime import datetime import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.spiders import CrawlSpider, Rule from ArticleSpider.items import LagouJobItem,

使用nodejs爬取拉勾苏州和上海的.NET职位信息

最近开始找工作,本人苏州,面了几家都没有结果很是伤心.在拉勾上按照城市苏州关键字.NET来搜索一共才80来个职位,再用薪水一过滤,基本上没几个能投了.再加上最近苏州的房价蹭蹭的长,房贷压力也是非常大,所以有点想往上海去发展.闲来无聊写了个小爬虫,爬了下苏州跟上海的.NET职位的信息,然后简单对比了一下. 是的小弟擅长.NET,为啥用nodejs?因为前几天有家公司给了个机会可以转nodejs,所以我是用来练手的,不过后来也泡汤了,但是还是花两晚写完了.刚学,代码丑轻喷哈! 一:如何爬取拉勾的数据

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.

python爬虫爬取美女图片

python 爬虫爬取美女图片 #coding=utf-8 import urllib import re import os import time import threading def getHtml(url): page = urllib.urlopen(url) html = page.read() return html def getImgUrl(html,src): srcre = re.compile(src) srclist = re.findall(srcre,html)

如何防止网站被爬虫爬取的几种办法

如何防止网站被爬虫爬取的几种办法 小 中 大 chen 2013-10-08 23:26 Linux 547 次浏览 抢沙发 今天想对一个问题进行分析和讨论,就是关于爬虫对网站页面爬取的问题,有些网站通过爬虫去采集其它的网站页面信息作为己用,大量的爬取行为会对web服务器有比较性能有影响,主要的表现就是会变得很慢. 对于如何防止网站被爬取,我想从以下几种方法去分析: 1.基于程序本身去防止爬取:作为爬虫程序,爬取行为是对页面的源文件爬取,如爬取静态页面的html代码,可以用jquery去模仿写h

Python编写网页爬虫爬取oj上的代码信息

OJ升级,代码可能会丢失. 所以要事先备份. 一开始傻傻的复制粘贴, 后来实在不能忍, 得益于大潇的启发和聪神的原始代码, 网页爬虫走起! 已经有段时间没看Python, 这次网页爬虫的原始代码是 python2.7版本, 试了一下修改到3.0版本, 要做很多包的更替,感觉比较烦,所以索性就在这个2.7版本上完善了. 首先观赏一下原始代码,我给加了一些注释: # -*- coding: cp936 -*- import urllib2 import urllib import re import