selelinum+PhantomJS 爬取拉钩网职位

使用selenium+PhantomJS爬取拉钩网职位信息,保存在csv文件至本地磁盘

拉钩网的职位页面,点击下一页,职位信息加载,但是浏览器的url的不变,说明数据不是发送get请求得到的。

我们不去寻找它的API。这里使用另一种方式:使用PhantomJS模拟浏览,通过单击页面获取下一页。

这里的PhantomJS是一个没有界面的浏览器。

 1 from selenium import webdriver
 2 import time
 3 import random
 4
 5 from selenium.webdriver.common.by import By
 6 from selenium.webdriver.support import expected_conditions as EC
 7 from selenium.webdriver.support.ui import WebDriverWait
 8
 9 ‘‘‘
10 使用selenium+PhantomJS爬取拉钩网职位信息,保存到csv文件至本地磁盘
11 需要加请求头
12 ‘‘‘
13
14
15 ‘‘‘
16 phantomjs.page.customHeaders.   :自定义请求头的固定写法
17 如:定义代理:phantomjs.page.customHeaders.User-Agent
18 ‘‘‘
19 dc = {
20     ‘phantomjs.page.customHeaders.User-Agent‘:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36‘
21 }
22
23 # 创建浏览器对象
24 browser = webdriver.PhantomJS(executable_path=r‘E:\PycharmProjects\pachong\phantomjs-2.1.1-windows\phantomjs-2.1.1-windows\bin\phantomjs.exe‘,desired_capabilities=dc)
25
26 # 发送请求
27 browser.get(‘https://www.lagou.com/jobs/list_?labelWords=&fromSearch=true&suginput=‘)
28 time.sleep(2)
29
30 # 保存网页截图
31 browser.save_screenshot(‘lagou.png‘)
32
33 # 实例化wait对象 设置等待超时时间为20秒
34 wait = WebDriverWait(browser,20)
35
36 # # 创建csv文件
37 f = open(‘lagou.csv‘,‘w‘,encoding=‘utf-8‘)
38
39 while True:
40     # 获取数据
41     job_list = browser.find_elements_by_css_selector(‘.item_con_list li‘)
42     for job in job_list:
43         pname = job.find_element_by_tag_name(‘h3‘).text
44         ptime = job.find_element_by_class_name(‘format-time‘).text
45         company = job.find_element_by_css_selector(‘.company_name a‘).text
46         money = job.find_element_by_class_name(‘money‘).text
47         exp = job.find_element_by_class_name(‘li_b_l‘).text.split(‘ ‘)[1] #这里的text不取div里面的标签的内容,只取div中的内容。类名为li_b_l的div有两个,经验属于第二个,还有一个工作要求的
48         location = job.find_element_by_tag_name(‘em‘).text
49         reqtags = job.find_elements_by_css_selector(‘.li_b_l span‘) #div的类是li_b_l,里面含有很多span标签.会把工资的那一个也包含进来,后面需要处理
50         reqtags = ‘ ‘.join([reqtag.text for reqtag in reqtags][1:]) #每个条目的第一项是工资的那个,这里使用列表的切片去掉。
51
52         # 将数据放入一个列表,便于后面csv文件格式处理,使用,隔开每一项
53         data = [pname,ptime,company,money,exp,location,reqtags]
54         # print(data)
55         f.write(‘,‘.join(data) + ‘\n‘)
56
57         print(data)
58     if ‘pager_next pager_next_disabled‘ not in browser.page_source:
59         # 获取下一页按钮
60         wait.until(EC.element_to_be_clickable((By.CLASS_NAME,‘pager_next ‘))) #原网页中的类的最后有一个空格
61         # 点击进入下一页
62         browser.find_element_by_class_name(‘pager_next ‘).click()
63         time.sleep(3 + random.random()*1) #时间需要延长一点,时间太短,页面没有加载完成,获取数据会报错
64     else:
65         break
66
67 # 关闭文件
68 f.close()

原文地址:https://www.cnblogs.com/doitjust/p/9221319.html

时间: 2024-11-09 22:40:38

selelinum+PhantomJS 爬取拉钩网职位的相关文章

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

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

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

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

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

爬取拉钩全站的职位信息

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

Python 爬取拉勾网python职位信息

今天的任务是爬取拉勾网的职位信息. 首先,我们进入拉勾网,然后在职位搜索栏搜索Python 的同时,打开控制面板F12,来查看网页构成. 在XHR里,可以清楚的看见Ajax请求,所以需要使用session模块来模拟浏览器的行为来操作. 源代码如下: import requests import json header = { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Referer': 'https://www.la

爬虫黑科技,我是怎么爬取indeed的职位数据的

最近在学习nodejs爬虫技术,学了request模块,所以想着写一个自己的爬虫项目,研究了半天,最后选定indeed作为目标网站,通过爬取indeed的职位数据,然后开发一个自己的职位搜索引擎,目前已经上线了,虽然功能还是比较简单,但还是贴一下网址job search engine,证明一下这个爬虫项目是有用的.下面就来讲讲整个爬虫的思路. 确定入口页面 众所周知,爬虫是需要入口页面的,通过入口页面,不断的爬取链接,最后爬取完整个网站.在这个第一步的时候,就遇到了困难,一般来说都是选取首页和列

拉钩网爬取所有python职位信息

最近在找工作,所以爬取了拉钩网的全部python职位,以便给自己提供一个方向.拉钩网的数据还是比较容易爬取的,得到json数据直接解析就行,废话不多说, 直接贴代码: 1 import json 2 import urllib 3 import urllib2 4 from openpyxl import load_workbook 5 filename = 'E:\excel\position_number_11_2.xlsx' 6 ws = load_workbook(filename=fi

使用selenium动态渲染爬取拉勾网上450个java职位的信息

开始这个小项目的时候要确保你的电脑中有装上selenium以及相应的浏览器驱动,还有别忘了Mongodb数据库 我们首先打开拉勾网的官网查看下基本的页面元素 当我在搜索框中输入java的时候,url如下,当我想用下面的url进行抓取的时候,我发现事情并不简单. 我点击下一页的时候发现,url并没有变化,所以并不能用最基本的抓取方法了,而改为ajax请求进行抓取 当我查看ajax请求的时候,发现事情又不简单的了,这个分页的请求带的参数时Form data,也就是表单形式的参数, 所以,拉勾网上的a

拉勾网爬取全国python职位并数据分析薪资,工作经验,学历等信息

首先前往拉勾网"爬虫"职位相关页面 确定网页的加载方式是JavaScript加载 通过谷歌浏览器开发者工具分析和寻找网页的真实请求,确定真实数据在position.Ajax开头的链接里,请求方式是POST 使用requests的post方法获取数据,发现并没有返回想要的数据,说明需要加上headers和每隔多长时间爬取 我们可以看到拉勾网列表页的信息一般js加载的都在xhr和js中,通过发送ajax加载POST请求,获取页面信息. 这个是ajax的头信息,通过Form Data中的的信