day3.15

day3.15-requests和bs4的用法

css基本语法以及css选择器

css基本语法

<!-- 
css(层叠样式表,简称样式,样式表)负责网页内容的布局和样式
 1.css代码写在哪
 1)内联样式表:将css代码写在标签的style属性中
 2)内部样式表:将css代码卸载style标签中
 3)外部样式表:将css代码写在css文件中,然后再html代码中用link标签导入
 
 2.css代码怎么写
 
 -->



<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 1.内联样式表 -->
		<p style="color: red;">内联样式表</p>
		<a href="https://www.baidu.com/" style="color: red;font-size: 30px;">百度</a>
		<!-- 2.内部样式表 -->
		<br><br>
		<p id="p1">内部样式表</p>
		<a id="a1" href="https://www.iqiyi.com/">爱奇艺</a>
		<style type="text/css">
			#p1{
				color: lawngreen;
			}
			#a1{
				color: #2fba2f;
				font-size: 25px;
			}
		</style>
		<!-- 3.外部样式表 -->
		<br><br>
		<link rel="stylesheet" type="text/css" href="css/test.css"/>
		<a id="a2" href="https://v.qq.com/">腾讯视频</a>
		
			
	</body>
</html>

css选择器

<!-- 
	1.元素选择器(标签选择器)
	将标签名作为选择器,选中所有的指定标签:
	例如:a{} 	-	选中所有的a标签
		  p{} 	-	选择所有的p标签

	2.id选择器
	在id属性值前加#作为一个选择器,选中id值是指定值的标签(id是唯一的)
	例如:#a1{} 	-	选择id值为a1的标签

	3.class选择器
	在class属性值前加.作为一个选择器,选中class属性值是指定值的标签
	不同的标签可以有相同的class值,同一个标签可以有不同的class值
	例如:.c1 	-	选中所有class值为c1的标签
		.c1.c2 	-	选中所有class值同时为c1和c2的标签

	4.群组选择器
	将多个选择器用逗号隔开并作为一个选择器,选中每个独立选择器选中的所有标签
	例如:p,a{} 	-	选中所有的p标签和a标签
		p,.c1{} 	-	选中所有的p标签和class1为c1的标签
 
	5.子代选择器
	将多个选择器用>符号隔开作为一个选择器
	例如:div>#p1>a 	-	选择div下面的id为p1标签下面的a标签	(前后必须是父子关系)
	
	6.后代选择器
	将多个选择器用空格隔开作为一个选择器
    例如:div div a 	- 选中div下面的div标签的a标签	(前后是后代选择器)

 
 -->

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<!-- 1.元素选择器 -->
		<!-- <style type="text/css">
			p{
				color: #2FBA2F;
				background-color: blue;
			}
			a{
				color: #FF0000;
				background-color: #7CFC00;
			}
		</style> -->
		
		<!-- 2.id选择器 -->
		<!-- <style type="text/css">
			#x3{
				color: red;
				background-color: aquamarine;
			}
		</style> -->
		
		<!-- 3.class选择器 -->
		<!-- <style type="text/css">
			.c4.c1{
				color: red;
				background-color: aqua;
			} 
		</style>-->
		
		<!-- 4.群组选择器 -->	
		<!-- <style type="text/css">
			p,.c1{
				color: red;
			}
		</style> -->
		
		<!-- 5.子代选择器 -->
		<!-- <style type="text/css">
			div>div>p{
				color: red;
			}
		</style> -->
		
		<!-- 6.后代选择器 -->
		<style type="text/css">
			div?div p{
				color: #2FBA2F;
			}
		</style>
		
		<p id="x1">我是段落1</p>
		
		<div id="box">
			<p id="x2">我是段落2</p>
			<span>我是span1</span>
		</div>
		
		<div>
			<p id="x3" class="c1 c2 c4">我是段落3</p>
			<div>
				<p id="x4" class="c2 c4">我是段落4</p>
			</div>
			<a id="b1" href="">我超链接2</a>
		</div>
		
		<a id="b2" href="" class="c1 c3 c4">我是超链接1</a>
		
	</body>
</html>

requests用法

import requests
# requests是python用于网络(http)请求的第三方库也是爬虫获取网络数据的重要数据
# 1. 向目标地址(网络地址)发送请求
'''
requests.get(url,*,header,proxies,timeout)  -   以指定方式给地址发送网络请求,返回知识服务器返回的响应对象

参数说明:
url -   字符串;请求的网络地址,可能是目标网站网址,也可能是数据接口
header  -   字典;请求头,用于伪装浏览器设置user-agent、和完成自动登录设置cookie
proxies -   字典;设置代理ip(ip地址被封的时候使用)
timeout -   数字;设置超时时间


'''
url = "https://search.51job.com/list/090200,000000,0000,00,9,08,%25E6%2595%25B0%25E6%258D%25AE%25E5%2588%2586%25E6%259E%2590,2,1.html?lang=c&postchannel=0000&workyear=01&cotype=99&degreefrom=04&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare="
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}
response = requests.get(url,headers)
# print(response)


# 2. 获取响应头
# print(response.headers)

# 3. 设置响应的编码方式(在获取请求结果乱码时使用
response.encoding = ''

# 4. 获取请求结果
# 1)获取字符串格式的结果(爬网页)
# print(response.text)

# 2)采取二进制格式的结果(爬视频、图片、音频)
# print(response.content)

# 3)获取json解析的结果(爬接口数据)
# print(response.json())

bs4用法

# 注意:安装第三方库的时候安装beautifulsoup4而不是bs4
from bs4 import BeautifulSoup

# 1.创建BeautifulSoup对象
# BeautifulSoup(html代码,'lxml')  -   返回网页对象
html = open('05css选择器(重要).html',encoding='utf-8').read()
soup = BeautifulSoup(html,'lxml')
# print(soup)

# 2.获取标签
# 1)基于整个网页获取标签
# Beautifulsoup对象.select(css选择器)    -   返回css选择器在整个网页中选中的所有标签,标签以列表形式返回
# Beautifulsoup对象.select_one(css选择器)    -   返回css选择器在整个网页中选中的第一个标签,返回值是标签对象

# result = soup.select('p')
# print(result)
# print()

# result = soup.select('div>p')
# print(result)

# result = soup.select('div p')
# print(result)

# 2)基于制定标签获取内容
# 标签对象.select(css选择器)   -   在制定标签中按照选择选中相关标签
# 标签对象.select_one(css选择器)
div1 = soup.select_one('#box')
result = div1.select('p')
print(result)

# 3. 获取标签内容和标签属性值
# 1)获取标签内容:
# 标签对象.text
# 标签对象.string
# 标签对象.contents
result = soup.select_one('#p2').text
print(result)
print()
result = soup.select_one('#p2').string
print(result)

result = soup.select_one('#p2').contents
print(result)

# for p in soup.select('p'):
#     print(p.text)


# 2)获取标签属性
# 标签对象.attrs[属性名]
result = soup.select_one('#a1').attrs['href']
print(result)

作业

import requests
from bs4 import BeautifulSoup
from re import search
import csv
import time
times = 0
all_data = []
while times <= 225:
    url = f'https://movie.douban.com/top250?start={times}&filter='
    headers = {
        'user-agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
    }
    response = requests.get(url,headers=headers)
    soup = BeautifulSoup(response.text,'lxml')
    all_li = soup.select('.grid_view>li')

    for li in all_li:
        # 电影名
        name_movie = li.select_one('.title').text
        result = li.select_one('.bd>p').text.strip().replace(' ', '')
        # print(result)
        # 导演
        director = search(r'导演:(.+?)\s',result).group(1)
        # 主演
        try:
            actor = search(r'\s主演:(.+?)\n', result).group(1)
        except:
            actor = '略'
        # 上映时间
        time_show = search(r'\n(.+?)\s*/',result).group(1)
        # 国家
        country = search(r'/\s*(.+?)\s*/',result).group(1)
        # 电影类型
        movie_type = search(r'/.+/\s*(.+?)$',result).group(1)
        # 评分
        score = li.select_one('.star>.rating_num').text
        # 评价人数
        people_num_text = li.select('.bd>.star>span')[-1].text
        people_num = search(r'([0-9]+).+',people_num_text).group(1)
        # 图片地址
        pic_loction = li.select_one('.pic img').attrs['src']

        # print(pic_loction)
        all_data.append([name_movie,director,actor,time_show,country,movie_type,score,people_num,pic_loction])

        # print(all_data)
    times += 25
    time.sleep(5)

def fun(list):
    writer1 =  csv.writer(open('豆瓣电影250.csv','w',encoding='utf-8',newline=''))
    writer1.writerow(['电影名字','导演','主演','上映时间','国家','电影类型','评分','评论人数','封面地址'])
    writer1.writerows(list)
fun(all_data)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值