selenium 爬取拉勾

2021-08-28 09:00:48 字數 3087 閱讀 8565

用到的知識點:

'''用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...