码迷,mamicode.com
首页 > Web开发 > 详细

selelinum+PhantomJS 爬取拉钩网职位

时间:2018-06-24 21:10:11      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:报错   使用   取数   需要   lag   obs   实例化   nts   use   

使用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=rE:\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()

 

selelinum+PhantomJS 爬取拉钩网职位

标签:报错   使用   取数   需要   lag   obs   实例化   nts   use   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!