在拉钩学习的笔记(一)CSS的核心样式

这篇博客深入探讨了CSS中的核心概念,包括子级和兄弟选择器、结构伪类、伪元素选择器、属性选择器等。详细介绍了CSS3的新特性,如边框圆角、文本阴影、盒子阴影、过渡效果和2D/3D转换。还涵盖了CSS盒模型,如content-box和border-box的区别,以及如何使用transform-origin调整元素的变换原点。此外,文章还讨论了CSS3动画的创建与绑定,并提到了CSS在处理文本、行高、对齐和装饰等方面的基础样式。
摘要由CSDN通过智能技术生成

1、新增选择器  子级选择器
    子级选择器用于选取带有特定父元素的元素
    书写语法:element1>element2(父级>子级)
2、新增选择器  兄弟选择器
    相邻兄弟选择器:可以用于选择紧跟在另一个元素后面的兄弟元素,而且二者有相同的父元素
        element1 + element2  匹配同一个父元素中紧跟在element1后面的一个element2元素
    其他兄弟选择器:匹配同一个父元素中在element1后面的所有element2元素
    element1 ~ element2  匹配同一个父元素中在element1后面的所有element2元素
3、结构伪类选择器
    E:first-child  匹配父元素中的第一个子元素
    E:last-child   匹配父元素中的最后一个子元素
    E:nth-child(n) 匹配父元素中的第n个子元素
    E:first-of-type指定类型的第一个
    E:last-of-type 指定类型的最后一个
    E:nth-of-type(n)指定类型的第n个
    注意:nth-child(n),n可以是数字,关键字和公式;常见的关键字even偶数,odd奇数;常见的公式:2n 偶数;2n+1  奇数;5n  5,6,7,8,9...;-n+5  5,4,3,2,1,0……
        第0个元素或者超出了元素的个数会忽略
5、伪元素选择器
    新增伪元素:
        E::before       在E元素内部的前面插入一个元素
        E::after        在E元素内部的后面插入一个元素
        E::first-letter 选中了E容器内的第一个字母
        E::first-line   选中了E容器内的第一行文本
    伪元素只能给双标签添加,不能给单标签添加;伪元素的冒号前不能添加空格;伪元素里面必须写上属性content:"";
6、属性选择器
    用来选择包含指定属性的标签
    E[att]  选择具有att属性的E元素
    E[att="val"]  选择具有att属性且属性值等于val的E元素
    E[att^="val"] 匹配具有att属性、且值以val开头的E元素
    E[att$="val"] 匹配具有att属性、且值以val结尾的E元素
    E[att*="val"] 匹配具有att属性、且值中包含val的E元素
    PS;选择器权重
        基础选择器:id选择器>类选择器>标签选择器>*
        伪类选择器、属性选择器的权重等于类选择器
        伪元素选择器的权重等于标签选择器
7、css3盒模型
    CSS3中可以通过box-sizing来指定盒模型
    属性值:content-box 默认值,标准盒子模型,盒模型是向外扩的,width和height只包括内容的宽和高,在width和height之外绘制元素的内边距和边框
        border-box  怪异模式,盒模型是内减的,width和height属性包括内容,内边距和边框,不包括外边框,为元素指定的任何内边距和边框都将在已设定的width和height内进行绘制
8、CSS3的常用属性 border-radius 边框圆角
    作用:设置边框的圆角
    属性值:像素值,百分比,百分比参考的是盒子的整体宽度、高度的百分比
        x-radius/y-radius:/分隔两部分属性值,前面为水平半径,后面为垂直半径,得到的是椭圆形
        radius:一个属性值,则水平和垂直都设置为同一个值,得到的是圆角
        border-top-left-radius:半径;。
        /的属性值写法:border-radius属性值中出现了/斜线,那么/前面可以设置水平方向的四种写法,/后面可以设置垂直方向的四种值的写法
9、CSS3的常用属性  text-shadow  文本阴影
    属性值: h-shadow:必须,水平阴影的距离,允许负值
        v-shadow:必须,垂直阴影的距离,允许负值
        blur:可选,模糊的距离
        color:可选,阴影的颜色
    text-shadow:3px 3px 5px #f00;
    多层阴影:逗号分隔多个阴影的属性值,多阴影中,先写的阴影压盖在后写的阴影上。
    text-shadow:3px 3px #f00, 6px 6px #0f0, 9px 9px #00f;
10、盒子边框阴影  box-shadow  
    属性值: h-shadow:必须,水平阴影的距离,允许负值
        v-shadow:必须,垂直阴影的距离,允许负值
        blur:可选,模糊的距离
        spread:可选,阴影的尺寸
        color:可选,阴影的颜色
        inset:可选,只外部阴影改为内部阴影
    box-shadow:水平位置  垂直位置  模糊程度  扩展大小  颜色  是否内边框阴影;
11、过渡属性  transition
    作用:在不使用flash或者JavaScript的情况下,使用transition可以实现补间动画(过渡动画),并且当元素只要有“属性”发生变化时即出现两种状态(我们用A和B代指),那么A和B之间就可以实现平滑过度的动画效果
    语法格式:transition:过渡的属性  过渡的时间  运动曲线  延时时间;
    单一属性:
            transition-property:规定应用过渡的CSS属性的名称。none表示没有属性过渡,all表示所有变化的属性都过渡;属性名  使用具体的属性名,多个属性名中间逗号分隔
            transition-duration:定义过渡花费的时间,默认是0。以s秒为单位
            transtion-timing-function:定义过渡效果的时间曲线,默认是ease。liner规定以相同的速度开始至结束

由于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、付费专栏及课程。

余额充值