在阅读以下内容前你需要懂得Selenium的一些简要操作,如果不会请查看上Selenium的简要操作。
爬取拉钩网站分为三步:获取列表页->获取详情页->点击获取下个列表页,话不多说直接贴代码吧!
from selenium import webdriver
from lxml import etree
import time
import re
class Lagou():
def __init__(self):
self.driver=webdriver.Chrome()
self.url='https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput='
def run(self):
self.driver.get(self.url)
#print(self.driver.page_source)
while True:
source=self.driver.page_source
self.parse_list(source)
time.sleep(2)
btn = self.driver.find_element_by_xpath('//*[@id="s_position_list"]/div[2]/div/span[6]')
if 'pager_next pager_next_disabled' in btn.get_attribute('class'):
break
else:
btn.click()
def parse_list(self,source):
html=etree.HTML(source)
#详情页面
links=html.xpath('//a[@class="position_link"]/@href')
for link in links:
#print(link)
#让driver去请求详情页面
self.request_detail(link)
time.sleep(1)
def request_detail(self,url):
self.driver.execute_script("window.open('%s')"%url) # 打开另一个窗口
self.driver.switch_to.window(self.driver.window_handles[1]) # 切换到另一个窗口
source=self.driver.page_source
self.parse_detail(source)
self.driver.close()#关闭打开的窗口
# 切换回第一页
self.driver.switch_to.window(self.driver.window_handles[0]) # 切换到首页
def parse_detail(self,soure):
text=etree.HTML(soure)
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,desc)
print("*"*10)
没有一蹴而就的成功,只有不断努力的拼搏