• 招聘网站爬虫模板


    招聘网站爬虫模板

    1. 项目的创建
    2. 项目的设置
    3. 中间件的理解与使用
    4. selenium的基本使用

    爬虫项目的创建:

    1. scrapy startproject spiderName
    2. cd spiderName
    3. scrapy genspider name www.xxx.com

    项目的设置:

    settings的基础设置:

    1. USER_AGENT='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'
      
    2. ROBOTSTXT_OBEY = False	#关闭协议
      LOG_LEVEL = 'ERROR'		#日志输出最低等级
      
    3. DOWNLOADER_MIDDLEWARES = {	#开启下载器中间件
         # 'TZemployment.middlewares.TzemploymentDownloaderMiddleware': 543,
         'TZemployment.middlewares.自定义中间件名字': 543,
      
      }
      
    4. ITEM_PIPELINES = {	#开启item
         'TZemployment.pipelines.TzemploymentPipeline': 300,
      }
      

    中间件的理解与使用:

    虽然中间件网上的示意图都烂大街了,我还是想贴一下;

    中间件分为下载器中间件与爬虫中间件,我们常说的中间件为下载器中间件;

    定义(官方解释):

    ​ 下载器中间件是位于引擎和下载器之间的特定挂钩,它们在从引擎传递到下载器时处理请求,以及从下载器传递到引擎的响应。

    如果需要执行以下操作之一,请使用Downloader中间件:

    • 在将请求发送到下载器之前处理请求(即,在Scrapy将请求发送到网站之前);
    • 在将接收到的响应传递给蜘蛛之前,先对其进行更改;
    • 发送新的请求,而不是将收到的响应传递给蜘蛛;
    • 将响应传递给蜘蛛,而无需获取网页;
    • 默默地丢弃一些请求。

    说人话就是:所有的请求与响应都会经过它,我们可以截取并修改成我们需要的形式或功能;

    下载器中间件的好处:

    • 可以集成Selenium、重试和处理请求异常等
    • 我们就是用到了Selenium在中间件中对接scrapy;

    selenium在中间件中的使用:

    selenium的基本语法:

    推荐该网站:http://www.testclass.net/selenium_python

    image-20200920212307797

    通过selenium中的page_source获取网页源码,发送至spider下的parse进行xpath解析。

    # -*- coding: utf-8 -*-
    from scrapy import signals
    from scrapy.http import HtmlResponse
    import time
    
    
    #设置selenium的中间件
    class SelemiumSpiderMiddleware(object):
        #对发送的
        def process_request(self,request,spider):
    		#通过spider调用spider下的driver属性
            spider.driver.get(request.url)
            time.sleep(1)
            page_text = spider.driver.page_source
    
            return HtmlResponse(url=request.url,body=page_text,request=request,encoding='utf-8')
    

    存储部分:(pipelines模块)

    该存储功能如下,代码暂时不开放;

    调用外部文件,自动建库建表,对MySQL中的数据进行检测是否重复;

    主函数spider配置:

    # -*- coding: utf-8 -*-
    
    import scrapy
    from selenium import webdriver
    #from .. import items
    from TZtalent.items import TztalentItem
    #from 主项目名.items import items中的类
    class TzcodeSpider(scrapy.Spider):
        #泰州就业人才网
        name = 'tzcode'
        # allowed_domains = ['www.xxx.com']
        #不需要动,改相应的配置信息即可
        #传参
        def __init__(self,table_name,keyword,webhook,*args,**kwargs):
            super(TzcodeSpider, self).__init__(*args, **kwargs)
            # path = r"C:UsersAdministratorDesktopphantomjs-1.9.2-windowsphantomjs.exe"
            # self.driver = webdriver.PhantomJS(executable_path=path)
            #防止selenium识别
            options = webdriver.ChromeOptions()
            options.add_experimental_option("excludeSwitches", ["enable-automation"])
            options.add_experimental_option('useAutomationExtension', False)
            self.driver = webdriver.Chrome(options=options)
            self.driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
                "source": """
                Object.defineProperty(navigator, 'webdriver', {
                  get: () => undefined
                })
              """
            })
            # self.driver = webdriver.Chrome()
            ##灵活变动,有的网站统一是gb2312编码,需要将URL进行转换--urlencode编码
            #self.keyword = quote(keyword.encode("gb2312"))
            self.keyword = keyword
            self.webhook_url = webhook
            self.table_name = table_name
            self.start_urls =[f"-----------url------{self.keyword}"]
    	
        #解析selenium发过来的response数据
        def parse(self, response):
            # print(response.url)
            #父标签---所需要信息标签上的父标签
            div_list = response.xpath("父标签xpath语法")
            item = TzemploymentItem()
            for div in div_list:
                item['title'] = div.xpath("./匹配的title信息xpath").extract_first()
                #判断title是否为空
                if item['title'] == None:
                    break
                item['company_name'] = div.xpath("./匹配的company_name信息xpath").extract_first()
                item['company_url'] = div.xpath("./匹配的company_url信息xpath").extract_first()
                item['site'] = div.xpath('./匹配的site信息xpath').extract_first()
                yield items
        #
        def __del__(self):
            #退出驱动并关闭所有关联的窗口
            self.driver.quit()
    

    传参并启动爬虫:

    #spider中url与xpath配置完成后,进行参数设置
    from scrapy import cmdline
    cmdline.execute("scrapy crawl tzcode -a table_name=表名 -a keyword=java -a webhook=".split())
    

    适用范围:

    • 网站反爬不强的地方网站;
    • 51job、拉钩等可使用。

    注:

    • 仅用于技术交流学习,不承担任何责任。
  • 相关阅读:
    (转)const变量通过指针修改问题
    sleep wait yeild join
    做事贵在坚持
    我的学习进度
    织梦dedecms后台添加图片style全部都变成st<x>yle的解决办法
    调用DEDE日期时间格式整理大全
    Arcgis andoid开发之应用百度地图接口实现精准定位与显示
    jquery自定义插件——window的实现
    lzugis—搭建属于自己的小型的版本控制SVN
    lzugis——Arcgis Server for JavaScript API之自定义InfoWindow
  • 原文地址:https://www.cnblogs.com/xbhog/p/13702469.html
Copyright © 2020-2023  润新知