在拉钩学习的笔记(二十二)自动化构建

1、自动化构建
    构建过程就是 源代码 转换成 生产代码 的过程
    为什么构建(构建内容)
        一些代码需要编译(css,js),保证浏览器的兼容性:将 Less 或 Sass 转换成 css;将 ES6+ 的新语法转成 ES5
        有些代码需要压缩(css、js、HTML、图片等):压缩后的代码体积更小,加载更快,节省带宽
        有些代码需要做格式化校验,统一代码风格
    将less 转 css : 安装 less 插件(npm i less -g); 通过 lessc 命令转换(lessc input.less output.css)
    自动化构建:自动化构建是指将手动构建任务,通过命令自动执行的过程
2、npm script 实现自动化构建的最简方式
    什么是 npm script
        npm 允许在 package.json 文件中,使用 script 字段定义脚本命令
    npm script自定义脚本命令 : 声明命令(package.json) "script":{"foo":"node bar.js"}; 执行命令 npm run foo 等同于 node bar.js
    npm script 任务的执行方式:
        并行(parallel): 任务之间没有先后顺序,同时执行可以提高执行效率   (并行执行)在 windows 下不起作用
        串行(series):任务之间有先后顺序,先执行前一个任务,后执行下一个任务
    npm-run-all: 安装  npm i npm-run-all -D 
        并行执行: npm-run-all -p 脚本1 脚本2 简写 run-p 脚本1 脚本2 
        串行执行: npm-run-all -s 脚本1 脚本2 简写 run-s 脚本1 脚本2 
3、构建样式文件
    将 less 转成 css  npm i less -g     lessc input.less output.css
    压缩 css 文件       npm i minify -g
    步骤: 初始化项目(npm init --yes); 添加 script 命令(less+minify); 执行 script 命令(npm run 命令)
4、构建脚本文件
    将 不兼容的ES6新语法 转成 兼容性好的ES5
    Babel插件可以将 ES6+ 语法转成 ES5
    babel 转换命令 
        单个文件:babel input.js --out-file output.js 或 babel input.js -o output.js
        整个目录: babel src --outd-dir dist 或 babel src -d dist
    步骤:初始化项目(npm init --yes); 安装Babel (npm install -g babel-core babel-cli) ; 安装转码规则(npm install -D babel-preset-env); 配置转换规则(.babelrc); 在 npm script 中添加转换命令(babel src -d dist); 执行转换命令
5、代码格式校验
    不同的工程师,写的代码风格不同;项目代码提交时,需要保持统一的代码格式
    可以通过工具完成代码格式校验:提供代码规范,根据编码规范,自动检查代码
    ESLint:对 JavaScript 代码格式进行检查      https://eslint.org/
        初始化项目(npm init --yes)
        安装 ESLint(npm i eslint -g)
        初始化配置文件(eslint --init)
        检查 js 代码格式 : 单个文件 (eslint path/filename.js) 整个目录 (eslint path/dirname)
    StyleLint: 对 css 代码格式进行检查
        初始化项目 (npm init --yes)
        安装 StyleLint(npm install --global styleLint)
        安装检测标准(npm install --global stylelint-config-standard)
        创建配置文件(.stylelintrc.json)
        检查 CSS 代码格式: 单个文件(stylelint path/filename.css)  整个项目(stylelint **/*.css)

由于WebMagic是Java语言编写的爬虫框架,因此在爬取拉钩网站之前,需要先了解该网站的反爬虫机制。拉钩网站采用了多种反爬虫策略,如IP限制、UA限制、Cookie限制、滑块验证码等。因此,在爬取拉钩网站时,需要使用代理IP、随机UA、Cookie池等技术来应对反爬虫机制。 以下是使用WebMagic爬取拉钩网站的步骤: 1. 导入WebMagic依赖:在Maven中添加以下依赖: ``` <dependency> <groupId>us.codecraft</groupId> <artifactId>webmagic-core</artifactId> <version>0.7.3</version> </dependency> ``` 2. 创建爬虫类:继承`Spider`类,并重写`process`方法,定义爬取逻辑。在`process`方法中,使用`Page`对象获取页面信息,并使用`Selectable`对象解析页面数据。如下所示: ``` public class LagouSpider extends Spider { private static final String URL_TEMPLATE = "https://www.lagou.com/zhaopin/Java/%d/?filterOption=%d"; private static final String COOKIE = "cookie"; // 替换为自己的Cookie private static final int MAX_PAGE = 30; public LagouSpider(PageProcessor pageProcessor) { super(pageProcessor); } @Override public void process(Page page) { List<Selectable> jobList = page.getHtml().css("div#s_position_list ul.item_con_list li.con_list_item").nodes(); for (Selectable job : jobList) { String jobName = job.css("div.p_top h3").xpath("string(.)").get(); String companyName = job.css("div.company div.company_name a").xpath("string(.)").get(); String salary = job.css("div.p_bot div.li_b_l span").xpath("string(.)").get(); String workLocation = job.css("div.position div.li_b_l").regex(".*?(.*?)").get(); System.out.println("职位名称:" + jobName); System.out.println("公司名称:" + companyName); System.out.println("薪资待遇:" + salary); System.out.println("工作地点:" + workLocation); System.out.println("==========================="); } } public static void main(String[] args) { Spider spider = Spider.create(new LagouPageProcessor()) .addUrl(String.format(URL_TEMPLATE, 1, 3)) .addCookie("Cookie", COOKIE) .thread(5); for (int i = 2; i <= MAX_PAGE; i++) { spider.addUrl(String.format(URL_TEMPLATE, i, 3)); } spider.run(); } } ``` 在上面的代码中,`LagouSpider`继承了`Spider`类,并在`process`方法中解析了职位名称、公司名称、薪资待遇和工作地点等信息。`main`方法中设置了起始URL、Cookie和线程数,并循环添加URL,最后启动爬虫。 3. 创建页面处理器类:继承`PageProcessor`类,并重写`process`方法,定义页面解析逻辑。如下所示: ``` public class LagouPageProcessor implements PageProcessor { private Site site = Site.me() .setRetryTimes(3) .setSleepTime(1000) .setCharset("UTF-8") .addHeader("User-Agent", UserAgentUtil.getRandomUserAgent()); @Override public void process(Page page) { if (page.getUrl().regex("https://www.lagou.com/zhaopin/Java/.*").match()) { page.addTargetRequests(page.getHtml().css("div.pager_container a").nodes() .stream().map(Selectable::links).flatMap(Collection::stream) .map(link -> link + "&filterOption=3").collect(Collectors.toList())); page.addTargetRequests(page.getHtml().css("div#s_position_list ul.item_con_list li.con_list_item div.p_top a").links().all()); } else if (page.getUrl().regex("https://www.lagou.com/jobs/.*").match()) { page.putField("jobName", page.getHtml().css("div.position-head div.name h1").xpath("string(.)").get()); page.putField("companyName", page.getHtml().css("div.company").regex(".*?公司信息</h3>(.*?)</div>").get()); page.putField("salary", page.getHtml().css("div.position-head div.salary").xpath("string(.)").get()); page.putField("workLocation", page.getHtml().css("div.position-head div.job_request p").regex(".*?(.*?).*?(.*?)").get(1)); } } @Override public Site getSite() { return site; } } ``` 在上面的代码中,`LagouPageProcessor`继承了`PageProcessor`类,并在`process`方法中解析了职位名称、公司名称、薪资待遇和工作地点等信息。`getSite`方法中设置了重试次数、睡眠时间、字符集和随机UA。 4. 运行爬虫:在`LagouSpider`类的`main`方法中启动爬虫即可。 需要注意的是,在爬取拉钩网站时,需要使用代理IP、随机UA和Cookie池等技术来应对反爬虫机制。另外,拉钩网站的页面结构比较复杂,需要使用`Selectable`对象进行解析,具体使用方法可以参考WebMagic的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值