使用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-Agent18 ‘‘‘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‘).text44 ????????ptime = job.find_element_by_class_name(‘format-time‘).text45 ????????company = job.find_element_by_css_selector(‘.company_name a‘).text46 ????????money = job.find_element_by_class_name(‘money‘).text47 ????????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‘).text49 ????????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 ????????break66 67 # 关闭文件68 f.close()
selelinum+PhantomJS 爬取拉钩网职位
原文地址:https://www.cnblogs.com/doitjust/p/9221319.html