总结:
一. css
1. 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>
2. css选择器
<!--
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>
二. requests的使用
1. requests的基本用法
import requests
# 1.发送请求,获取响应
# 请求地址
url = 'https://movie.douban.com/top250'
# 请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
response = requests.get(url, headers=headers)
# 2.响应内容
# 1)设置编码方式(乱码的时候才来设置)
# response.encoding = '编码方式'
# 2)获取状态码
# print(response.status_code)
# 3) 获取请求的文本内容(针对url是网页地址)
# print(response.text)
# 4) 获取json数据(针对url返回的数据是json的时候)
# print(response.json())
# 5) 获取二进制数据(针对url是二进制文件地址,比如图片地址)
# print(response.content)
# 3.响应头
# print(response.headers)
2. 图片下载
import requests
# 图片的网络地址
url = 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=1810171082,1266198879&fm=26&gp=0.jpg'
# 请求图片数据
response = requests.get(url)
# 保存图片数据
if response.status_code == 200:
f = open('./a.jpg', 'wb')
f.write(response.content)
f.close()
3. 多页面数据
# 如果目标网站以多页的方式来提供数据,爬虫的时候先找不同页面的url之间的规律
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
def get_top250(url):
response = requests.get(url, headers=headers)
if response.status_code != 200:
print('请求失败:', response)
return
print(response.text)
print('=============================================================')
if __name__ == '__main__':
for start in range(0, 226, 25):
url = f'https://movie.douban.com/top250?start={start}&filter='
get_top250(url)
4. 设置cookie
import requests
url = 'https://www.zhihu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
'cookie': '_zap=39beb782-a6cf-4483-8719-8e2d846da00d; _xsrf=zMuRHL0ug0AKhKYfxromKD0K2pb49WzV; d_c0="AMDePoka3xKPToqc24ryAdbkUVa-BnMNCLc=|1616989878"; __snaker__id=tuq6EBkbDlGyqzju; _9755xjdesxxd_=32; YD00517437729195%3AWM_TID=Lftr4M6kyApFUEUBFFcv0DqgQ5uBSC%2FF; q_c1=3aefdfd6a282410fb765b6e79ad0bbea|1617027299000|1617027299000; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1621528669; captcha_session_v2="2|1:0|10:1621932463|18:captcha_session_v2|88:cVlHd3N2c2hjQStsNUxZRkN6Tm9FaDZyVFpwSUlmUXF6U0s4dGRsZi9XZWViRlpHbEc4WUsyQ1lzbGdWS3lTWg==|d3cb1e6f1355e958ac77034692b101e6346c7bc353a9ad21c013992aff43d055"; gdxidpyhxdE=JbXPXLBqLi6GK31eGkNvrszIm%2Fg%2FtjWLrllf4c9xHms5Bc7g74xHrySLYSfinrarq0%5CLuuqcLKCympc4SsAU4IIoXaGNkwhJ2sBkjKOKdW6gR%2F9GV%5C%5Ce1DIfeDP2TlYL3BsxJcnj%2FNfmu0PhKktqRen3JSq7MReAOJkdx%2FhPmHXGphc8%3A1621933366142; YD00517437729195%3AWM_NI=AoJy0bekE%2F8X7hB9lSLdYi0X%2F6pOUWDn0KhWP7FyAAYeWyjGcWhyTwVQdnl5SRLwKN8mfv9Z8%2BPESIxWU4d%2B7o9qMebkgoqE6wySx0nq7pyANKsXw5uVBSEI42A%2B4w8SWno%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eebbd833bb9c83bac96896868fa3d14a929b9aabf43cb1f0ac8fec42b49c988fb82af0fea7c3b92a83b1869ab36aa7b58bd0bb54f5b88edaef5990bc978ab354edeac0b0d85d88b200aceb5d94e98a9ac44b9bbb999ae94da189a89ad77d968fac8fef3f918e8498ca46fcb3aa97bc52fcf5a0a6d243bc899bd5e721f5b1f792d06fa2b5a990f44ff6a9b7b4fb3caeaff991fc4b8e95bdb9f63fb78a8eb4c843f8ee8fccb77dfc8d998fee37e2a3; captcha_ticket_v2="2|1:0|10:1621932471|17:captcha_ticket_v2|704:eyJ2YWxpZGF0ZSI6IkNOMzFfWm1KWU0yUzl0TFlYZ3BWcGdJbkExbWFZYk9GLnhCZFBrTmNKUDBjdDFCRU14SHFJU2tHUWpJTjU4VjJCSlNuQTBPUFdGTmhmc21tSjVfVE9rV3FVVHpxYmUuV0EuZkpTN0Ffd1JPVFpvcjZQNlhDUS1nLVFlaTFMQXYuQWxSZmVzbEVLTGZWbUljU2Z6Wlh2enRKcUxzbnJDWlRILV9ZSy1rQUwuanJYMWJpQ0YyZzBYS1JaUEJKWm4tUW14Yk1OUmJNay1jTHA2bWsuY3FoRXFpaGxQeUtia0haaXBuTXhNX1JoWl9FVWl4eEtHT2ZINVJha2s5MHdMV3ouTWstam5DZTYtVFNyclh0cW9PQ1VjOHVjdXVtV01hUmtyQ3RHZ1d1bkJLenpUNUE1UkMxWFF4Tk5TZ05CY25HZnB2Wm1uZ1NoNGRrdGRwWUNXZk5ENFRVUkJ6MDBpRFUuRVYwbllxZ3NNUkYwc1pXWVlFX2VfS0Vja0RmeWc4aS5jMG51TUZvQ0xPUEZ0QTJHcWZjUlowaElCejYycFJReUR2dEtEQVNLNmlCYmR1Ulhya1NWY1ZFaEQ3LkxVQ1ZfLk5vd0RCUzQwb2FrYmFxTElHeGZnTkFmSFRwU19CSnQuUGFNUHREX2pBZ3ZwektBLmxaNHF5VjExMWVjc0NjMyJ9|393d2c8a4b7549a8c1df5184f3357547d2729421472ab7a59df83361d333880a"; z_c0="2|1:0|10:1621932484|4:z_c0|92:Mi4xaW5CWUdRQUFBQUFBd040LWlScmZFaVlBQUFCZ0FsVk54QWVhWVFCUFZ2NWhKbEJhWTB3cktxM005aUd4dEUxeXl3|6c3317d4aa2dbb0b06da1ea42761e973bfce66fdc118b87e578039301d30e8f1"; unlock_ticket="ADAc3rNA2xAmAAAAYAJVTczArGCn_dAUlOdmvcCoBo_kYjILeHHftw=="; tst=r; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1621932514; SESSIONID=clHAvrHVjgNck8AMqCNSKP4X6K6ov2BXsft9fu7LCYi; JOID=UF4WCkyKtnjwsrOkVoH35M89onpF7d86v8HF6Qrl1TOZ147hHm4A0JuzsqtSlWPkDvl7Fjh_MQJVoIKudYs-I6g=; osd=Wl8XAUuAt3n7tbmlV4rw7s48qX1P7N4xuMvE6AHi3zKY3InrH28L15Gys6BVn2LlBf5xFzl0NghUoYmpf4o_KK8=; KLBRSID=5430ad6ccb1a51f38ac194049bce5dfe|1621932577|1621932461'
}
response = requests.get(url, headers=headers)
if response.status_code == 200:
print(response.text)
else:
print('请求失败!', response)
作业
import requests
from re import *
url = 'https://www.imdb.cn/IMDB250'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'
}
response = requests.get(url, headers=headers)
result = response.text
print(result)
re_str = r'''(?s)blank"><img src="(.*?)".*?title='(.*?)' '''
result1 = findall(re_str, result)
print(result1, len(result1))
for x in result1:
url1 = x[0]
response1 =requests.get(url1)
if response.status_code == 200:
f = open(f'./img/{x[1]}.jpg', 'wb')
f.write(response1.content)
f.close()