# -*- coding: utf-8 -*-

# -*- coding: utf-8 -*-
import scrapy

from jobscrawler_qianchengwuyou.items import JobscrawlerQianchengwuyouItem
class QianchengSpiderSpider(scrapy.Spider):
    name = 'qiancheng_spider'
    # allowed_domains = ['www.qq.com']
    start_urls = [
        #关键字数据分析
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590%25E5%25B8%2588,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='

        #关键字数据挖掘
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%2595%25B0%25E6%258D%25AE%25E6%258C%2596%25E6%258E%2598,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='

        #关键字算法
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E7%25AE%2597%25E6%25B3%2595,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
                  
        #关键字机器学习
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%259C%25BA%25E5%2599%25A8%25E5%25AD%25A6%25E4%25B9%25A0,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='

        #关键字深度学习
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E6%25B7%25B1%25E5%25BA%25A6%25E5%25AD%25A6%25E4%25B9%25A0,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='

        #关键字人工智能
        'https://search.51job.com/list/000000,000000,0000,00,9,99,%25E4%25BA%25BA%25E5%25B7%25A5%25E6%2599%25BA%25E8%2583%25BD,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
    ]
    #以上是第一步,获取搜索到这些关键字的都有哪些url
    #第二步骤,这些个检索页,下面有很多页,要翻页,每一页中的每个详情页的里面的数据
    #那么首先我们要先写提取一个页面当中的url(每一个详情页的url),这应该是一个a标签

    def parse(self, response):
        xpath="//div[@class='el']" #这里面要过滤筛选一下用这个xpth获得
        items = response.xpath(xpath); #这里面获得是不满足条件的el标签
        print(items)
        for item in items:
        #遍历一下这个items,把不符合需求的过滤掉
        # 如何去过滤呢?也就是说如何选择下面这个if的条件呢,我们来看看原始网页代码的特点
            #观察之后我们发现每一个t1标签前面还都有一个p标签,t1后面还有一个空格
            if not len(item.xpath("./p[@class='t1 ']")):
                continue
                                  #一个点表示当前节点#p标签 t1 (这里有个空格)#这部分为这么这样写我不是特别明白
                   #也就是说我在上面这个items下面我再查找,有没有"p标签",有没有class等于‘t1空格’
            url = item.xpath("./p[@class='t1 ']//a/@href").extract_first()#这里获得是详情页的全部内容
        #./p[@class='t1 '#照抄,因为他下面只有一个“a标签”,获取他下面全部内容@
        #href属性,
            yield scrapy.Request(url, callback=self.detail_parse)
        #下面开始是想得到他的翻页行为
        next_page_url = response.xpath("//a[@id='rtNext']/@href").extract_first()
        if not next_page_url is None:
             yield scrapy.Request(next_page_url, callback=self.parse)
    def detail_parse(self,response):
        item = JobscrawlerQianchengwuyouItem()
        # 招聘名称
        item["job_name"] = response.xpath("//div[@class='cn']/h1/text()").extract_first().strip()
        # 可以获得没有白空格的job_name

        # 职位信息
        item["job_info"] = "".join(response.xpath("//div[@calss='bmsg job_msg inbox']//text()").extract()).strip()
        # 薪资
        item["job_salary"] = "".join(response.xpath('//div[@class="sp4"]/text()').extract()).strip()
        # 职位福利
        item["job_welfare"] = ",".join(response.xpath("//span[@class='sp4']/text()").extract())
        #item["job_welfare"] = response.xpath("//span[@class='sp4']/text()这样会获得一个列表,但是我们需要的是一个字符串
        # 经验要求
        item["job_exp_require"] = response.xpath('//p[@class="msg ltype"]/text()').extract()[1].strip()
        item["job_edu_require"] = response.xpath('//p[@class="msg ltype"]/text()').extract()[2].strip()

        # 学历要求#获取详情页的细节信息
        # 公司名称
        item["company_name"] = response.xpath('//div[@class="com_msg"]//p/text').extract_first().strip()
        # 公司行业
        # 公司性质
        itme["company_industry"] = "".join(response.xpath('//span[@class="i_trade"]/../text()').extract()).strip()
        item["company_nature"] = "".join(response.xpath('//span[@class="i_flag"]/../text()').extract()).strip()
        #“..(点点)”的意思是我希望定位到父标签的text,但是定位不到父标签,能定位到子标签同一级的标签,然后通过子标签点点,就可以了
        #"".join(....)意思是得到的是一个列表,join一下,就加到前面的“”当中去了,就变成str格式了
        #这里如果希望把所有的白空格都处理掉的话,就需要for循环,但是数据量比较大,就把收尾的白空格去掉就可以了
        # 公司人数
        item["company_people"] = "".join(response.xpath('//span[@class="i_people"]/../text()').extract()).strip()
        # 公司地址
        item["company_location"] = ""
        # 公司概况
        item["company_overview"] = "".join(response.xpath('//div[@class="tmsg inbox"]//text()').extract()).strip()

        # 公司融资阶段
        item["company_financing_stage"] = ""
        yield item

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值