用到的知識點:
'''用selenium爬取拉勾'''
from lxml import etree
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.by import by
from selenium.webdriver.support.wait import webdriverwait
import xlrd,xlwt,re,codecs,time
class lagouspider():
def __init__(self):
self.url = ''
self.browser = webdriver.chrome()
self.wait = webdriverwait(self.browser,10)
def run(self):
self.browser.get(self.url)
while true:
text = self.browser.page_source
# 提取具體頁面的url
self.parse_page(text)
next_btn = self.wait.until(ec.presence_of_element_located((by.xpath,'//div[@class="pager_container"]/span[last()]')))
# 判斷是否是最後一頁,如果是,退出while迴圈
if 'pager_next pager_next_disabled' in next_btn.get_attribute('class'):
break
else:
next_btn.click()
time.sleep(1)
# 提取具體頁面的url
def parse_page(self,text):
html = etree.html(text)
# 判斷所需元素是否載入出來
self.wait.until(ec.presence_of_element_located((by.xpath,'//a[@class="position_link"]')))
detial_urls = html.xpath('//a[@class="position_link"]/@href')
for detial_url in detial_urls:
# 請求詳情頁
self.request_detial_url(detial_url)
time.sleep(1)
# 提取之後,把當前的頁面關閉
# 請求詳情頁
def request_detial_url(self,detial_url):
# 解析具體頁面的字段資訊時候,開啟了另乙個頁面,覆蓋原來的頁面,我們這裡做的是利用while true迴圈來獲取全部頁面的字段資訊
# 所以第乙個頁面的視窗不能關閉
self.browser.execute_script("window.open('%s')" % detial_url) # 開啟另乙個視窗
self.browser.switch_to.window(self.browser.window_handles[1]) # 切換到另乙個視窗
source = self.browser.page_source
# 解析詳情頁的具體字段
self.parse_detial_url(source)
# 請求完之後關閉當前詳情頁的頁面
self.browser.close()
# 切換回第一頁
self.browser.switch_to.window(self.browser.window_handles[0]) # 切換到首頁
# 解析詳情頁的具體字段
def parse_detial_url(self,source):
text = etree.html(source)
# 判斷所需元素是否載入出來
self.wait.until(ec.presence_of_element_located((by.xpath,'//span[@class="name"]')))
name = text.xpath('//span[@class="name"]/text()')[0]
salsry = text.xpath('//dd[@class="job_request"]/p[1]/span[1]/text()')[0].strip()
city = text.xpath('//dd[@class="job_request"]/p[1]/span[2]/text()')[0]
city = re.sub(r'[\s/]', '', city)
work_years = text.xpath('//dd[@class="job_request"]/p[1]/span[3]/text()')[0]
work_years = re.sub(r'[\s/]', '', work_years)
job_advantage = text.xpath('//dd[@class="job-advantage"]/p/text()')[0]
desc = ''.join(text.xpath('//dd[@class="job_bt"]//text()')).strip()
print(name,salsry,city,work_years,job_advantage)
output = ('{}\t{}\t{}\t{}\t{}\n').format(name, salsry,city,work_years,job_advantage)
f = codecs.open('lagou.xls', 'a+')
f.write(output)
f.close()
def main():
spider = lagouspider()
spider.run()
if __name__ == '__main__':
main()
selenium 爬取拉勾
用到的知識點 用selenium爬取拉勾 from lxml import etree from selenium import webdriver from selenium.webdriver.support import expected conditions as ec from selen...
使用selenium爬拉勾網資料
usr bin env python encoding utf 8 description 使用selenium爬拉勾網資料 from selenium import webdriver from selenium.webdriver.support.ui import webdriverwait ...
Python爬取拉勾網招聘資訊
最近自學研究爬蟲,特找個地方記錄一下 就來到了51cto先測試一下。第一次發帖不太會。先貼個 首先開啟拉勾網首頁,然後在搜尋框輸入關鍵字python。開啟抓包工具。因為我的是mac os,所以用的自帶的safari瀏覽器的開啟時間線錄製。通過抓取post方法,可以看到完整url 然後可以發現post...