day21
总结
1. css选择器基础
-
<!-- css负责网页内容的样式和布局 css - 层叠样式表(简称:样式表) 1. css语法 语法: 选择器{属性名1:属性值1; 属性名2:属性值2; ...} 说明: 选择器 - 选中需要设置样式的标签 {} - 固定写法 属性名 - 决定需要设置那个样式 属性值 - 如果是表示数值大小,数字值需要单位,一般是px 常用属性: color: 文字样色(颜色值:颜色英文单词、rgb(红,绿,蓝)、#颜色值的16进制值) font-size: 字体大小 background-color: 背景颜色 width: 设置宽度 height: 设置高度 2.css代码写在哪儿 1)内联样式表 - 将css代码写在标签的style属性中(这个时候不需要写 选择器{}) 2)内部样式表 - 将css代码写在style标签中(style标签既可以放在head中,也可以放在body中) 3)外部样式表 - 将css代码写在css文件中,然后在html里面通过link标签导入 --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 内部样式 --> <!-- <style type="text/css"> p{ color: rgb(230, 78, 90); } a{ color: rgb(23, 200, 178); } </style> --> <!-- 外部样式 --> <link rel="stylesheet" type="text/css" href="./css/styl1.css"/> </head> <body> <!-- <h1>1. 内联样式案例:</h1> <p style="color: rgb(0,191,255); font-size: 30px; background-color: #ADFF2F;">我是段落1</p> <a href="">我是超链接1</a> --> <!-- <h1>2.内部样式案例</h1> <p>我是段落1</p> <a href="">我是超链接1</a> <p>我是段落2</p> --> <p>我是段落1</p> </body> </html>
-
<!-- css选择器 1. 标签选择器(元素选择器) - 1 直接将标签名作为一个选择器,选中整个页面所有的指定标签。 例如: p{} - 选中所有的p标签,a{} - 选中所有的a标签 2. id选择器 - 4 在标签的id属性值前加#作为一个选择器,选中id属性值是指定值的标签。(id是唯一的) 例如: #p2{} - 选中id值为p2的标签, #a - 选中id属性值为a的标签 3. 类选择器(class选择器) - 2 在标签的class属性值前加.作为一个选择器,选中class属性值是指定值的所有标签。 例如: .c1{} - 选中class属性值为c1的所有标签, .a{} - 选中class属性值为a的所有标签 .c1.c2 - 选中class属性值中同时有c1和c2和标签 4. 群组选择器 将多个独立的选择器用逗号隔开作为一个选择器,选中每个独立选择器选中的所有标签。 例如:p,a{} - 选中所有的p标签和所有的a标签 .c1,p{} - 选中所有class是c1的标签和所有的p标签 .c1,#p1,#p2{} - 选中所有class是c1, id是p1和id是p2的标签 5.后代选择器 将多个独立的选择器用空格隔开作为一个选择器 例如: p a - 选中所有作为p标签的后代的a标签。(选中p标签下面的a标签, a是p的后代) div #p1 .c1 - 选中div下面的id为p1下面class为c1的标签 6.子代选择器 将多个独立的选择器用>隔开作为一个选择器 例如: p>a - 选中所有作为p标签的子代的a标签 div.info{} - 选中class为info的div标签 #p1.c1{} - 选中id是p1并且class是c1的标签 p:nth-child(N) - 选中第N个p标签 div p:nth-child(N) - 选中div里面的第N个p标签 --> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style type="text/css"> /* =============1.标签选择器============= */ /* p{ color: red; } a{ color: coral; text-decoration: none; } */ /* =============2.id选择器============= */ /* #p2{ color: darkcyan; font-size: 35px; } */ /* =============3.类选择器============= */ /* .c1{ color: green; } .c2{ background-color: yellow; } .c1.c2{ font-size: 35px; } */ /* =============4.群组选择器============= */ /* p,a{ color: darkmagenta; } */ /* =============5.后代选择器============= */ /* div div a{ color: red; } */ /* div>a{ color: red; } */ /* div>div a{ color: red; } */ /* p.c1{ color: red; } */ div p:nth-child(2){ color: red; } </style> </head> <body> <p class="c1">我是段落1</p> <a href="">我是超链接1</a> <div id=""> <p id="p2">我是段落2</p> <font class="c1">我是font1</font> <input type="" name="" id="" value="" /> <!-- a标签同时拥有三个class值,分别是c1和c2、c3 --> <a class="c1 c2 c3" href="">我是超链接2</a> <div id=""> <h2 class="c2">我是标题1</h2> <p>我是段落3</p> <a href="">我是超链接3</a> <p class="c1"> 我是段落4 <a href="">我是超链接5</a> </p> </div> </div> </body> </html>
2. 网页爬取
-
import requests def main(): # 1. 发送请求,获取响应 url = 'https://movie.douban.com/top250' # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0' } # response = requests.request('GET', 'https://movie.douban.com/top250') response = requests.get(url, headers=headers) # 一般418是身份不对 # 2. 设置request的请求头,伪装成浏览器 headers = { 'User-Agent': 'Mozilla/5.0' } response = requests.get(url, headers=headers) # 3. 设置编码方式 if response.status_code == 200: print(response) # 4. 获取json数据,自动转换为python中的数据。相当于json.dumps(response.text) py_obj = response.json() # 5. 获取二进制数据(针对url是二进制文件,比如图片、音频、视频) bys = response.content with open(r'./a.jpg', 'wb') as f: f.write(bys) # 6. 获取响应头 res_headers = response.headers if __name__ == '__main__': headers = { 'User-Agent': 'Mozilla/5.0' } url = 'https://movie.douban.com/top250' response = requests.get(url, headers=headers) if response.status_code == 200: print(response.text)
-
# myThread.py import threading class MyThread(threading.Thread): def __init__(self, func, *args, **kwargs): super().__init__() self.func = func self.args = args self.kwargs = kwargs def run(self) -> None: self.func(*self.args, **self.kwargs)
-
# 如果目标王者以多页的方式来提供数据,爬虫的时候先找不同页面的url之间的规律 import requests from myThread import MyThread def get_top250(url, headers={}): response = requests.get(url, headers=headers) if response.status_code == 200: print(response.text) print('==================================') print('请求失败:', response) return if __name__ == '__main__': headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400' } for x in range(0, 50, 25): url = f'https://movie.douban.com/top250?start={x}&filter=' new_thread = MyThread(get_top250, url, headers=headers) new_thread.start()