智联的相关信息的获取

from queue import Queue

import requests
from selenium import webdriver
import time

import lxml.html
import re

class ZhiLianSpider(object):
‘’’
下载贴吧某页的内容,把下载的内容保存
‘’’

def __init__(self,name,pages):
    '''
    初始化所要调用的内容
    :param name:
    :param pages:
    '''
    self.tieba_name = name
    self.tieba_pages = pages
    self.base_url = "https://www.zhaopin.com/"
    self.header = {"User-Agent":"Python"}
    #self.crawl_queque是实例化Queue()类的一个对象
    self.crawl_queque = Queue()
    #UrlType后面是类/实例的两个属性,因为UrlType初始化的时候给了两个属性,所以在队列当中put(添加UrlType对象的实例)
    #初始化中加载一下我们的浏览器,说明可以用selenium模拟了,用来进行翻页及获取工作条目
    self.browser = webdriver.Chrome(executable_path="/cdrom/chromedriver")
    #get一下智联的网址,
    self.browser.get("https://sou.zhaopin.com/?jl=765&kw=python&kt=3")
    #构建一个假地址,因为队列不能为空,fakeplace这个名字是随便起的,按照网址结构写可以用到系统库,便于后序扩展
    self.crawl_queque.put("fakeplace://next")

def run(self):
    '''
    主业务逻辑,使用run后期可以改造成多线程爬虫
    :return:
    '''
    while not self.crawl_queque.empty():

        url_str = self.crawl_queque.get()
        time.sleep(7)#保证初始化加载及翻页能够正常的完成
        #获取智联招聘python职位一页上的所有职位条目(Item及一行数据)
        result_elements = self.browser.find_elements_by_css_selector("div.contentpile__content__wrapper > div.contentpile__content__wrapper__item")
        #循环遍历所有Item数据,获取每条Item中的地址信息
        for element in result_elements:
			#获取a标签中的href属性,注意:必须使用get_attribute,selenium不支持@href这种操作
            detail_url = element.find_element_by_xpath(".//a").get_attribute("href")
        # 使用requests下载
        #requests必须下载完当前链接才能下载下一个,不是异步的,这里不用休眠
            response = requests.get(detail_url,{"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36"})
            #解析职位详情
            parse_result = lxml.html.fromstring(response.text)
            #获取详情页中的职位描述
            job_detail = parse_result.xpath("//div[@class='pos-ul']//text()")                               #岗位要求详情
            address = parse_result.xpath("//p[@class='add-txt']/text()")[0]                                 #工作地址
            education = parse_result.xpath("//div[@class='info-three l']/span[3]/text()")[0]                #学历要求
            work_years = parse_result.xpath("//div[@class='info-three l']/span[2]/text()")[0]               #工作经验
            company_name = parse_result.xpath("//div[@class='company l']/a[@target='_blank']/text()")[0]     #公司的名字
            city = parse_result.xpath("//div[@class='info-three l']/span/a/text()")[0]                       #工作的城市
            min_salary = parse_result.xpath("//div[@class='l info-money']/strong/text()")[0].split("-")[0]   #最低薪资
            max_salary = parse_result.xpath("//div[@class='l info-money']/strong/text()")[0].split("-")[-1]  #最高薪资
            text = response.text
            welfare = re.findall(r"var JobWelfareTab = .+",text)[0].split("'")[1]                            #福利待遇
            print(welfare)
        #使用双浏览器一个显示详情页另一个显示翻页
        # self.browser_detail.get(detail_url)


	#翻页之前将浏览器滚动到翻页标签处,如果不使翻页标签(下一页)出现,有可能无法被选中
        self.browser.execute_script("window.scrollTo(0,document.body.scrollHeight - 100)")
        time.sleep(1)#等待滚动完成
        #获取上一页和下一页两个按钮
        next_elements = self.browser.find_elements_by_css_selector("div.soupager > button.soupager__btn")
        #点击下一页
        next_elements[1].click()
	
	#放入翻页伪地址,使crawl_queque。empty不为空,翻页能够继续进行
        self.crawl_queque.put("fakeplaceone://next")
        if True:
            pass
        else:
            pass

tieba_spider = ZhiLianSpider(“python”,1)
tieba_spider.run()

猜你喜欢

转载自blog.csdn.net/weixin_44274975/article/details/88199647