requests的用法
运行环境:import requests
def get_web_data(url: str):
# 1. 发送请求获取响应
# requests.get(目标地址)
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
response = requests.get(url, headers=headers)
# 如果网页中乱码:
# 在网页内容打印结果找meta标签中的charset属性,将响应的encoding的值设置成charset属性的值
# response.encoding = 'gbk'
# 2.获取数据(请求结果,爬取的内容)
# 1) 响应.text - 用网页爬取结果
print(response.text)
if __name__ == '__main__':
get_web_data('https://movie.douban.com/top250')
网页开发
前端三大技术: html + css + js
1. html - 负责网页内容的显示
一个网页就是html标签(一个网页是一个html文件);
html是通过各种各样的标签来提供各种内容,包括:文字、图片、超链接、视频、音频、输入框、按钮等。
标签内容 - 可以是纯文字,也可以是一个或者多个其他标签
2. html核心语法 - 标签
标签分为两种:单标签、双标签
- 双标签: <标签名 属性1=“值1” 属性2=“值2” …>标签内容</标签名>
- 单标签: <标签名 属性1=“值1” 属性2=“值2” …> 或者 <标签名 属性1=“值1” 属性2=“值2” …/>
3. 网页结构: 一个网页是一个html标签,里面有两个子标签分别是head标签和body
<html>
<head>
</head>
<body>
</body>
</html>
<html>
<head>
<meta charset="utf-8">
<title>余婷的网页</title>
<link rel="icon" href="files/luffy.jpg">
</head>
<body>
<!-- 1. 标题标签:h1~h2 -->
<h1>你好!</h1>
<h2>二级标题</h2>
<h3>三级标题</h3>
<h6>六级标题</h6>
<!-- 2.超链接:a -->
<a href="https://www.baidu.com">百度</a>
<!-- 3.图片标签:img -->
<img src="./files/luffy.jpg">
<img src="http://pic.rmb.bdstatic.com/bjh/news/e73e83467ae1afa2d8624661d7e5f7c8.jpeg" alt="">
<!-- 4.普通文字标签: p、span、div-->
<p>豆瓣用户每天都在对“看过”的电影进行“很差”到“力荐”的评价,豆瓣根据每部影片看过的人数以及该影片所得的评价等综合数据,通过算法分析产生豆瓣电影 Top 250。</p>
<p>导演: 弗兰克·德拉邦特 Frank Darabont 主演: 蒂姆·罗宾斯 Tim Robbins /...</p>
<p>我是p标签1</p>
<p>我是p标签2</p>
<span>我是一段普通文字1</span>
<span>我是一段普通文字2</span>
<div>
我又是一段文字
</div>
<input type="text">
<input type="password">
<input type="checkbox"><span>我没看过</span>
<input type="button" value="确定">
<button>确定</button>
<select name="" id="">
<option value="成都">成都</option>
<option value="重庆">重庆</option>
<option value="重庆">北京</option>
</select>
<p>如果有不懂的问题问<a href="https://www.baidu.com">百度</a></p>
<ul>
<li>
<h2>Python</h2>
<img src="https://image.baidu.com/search/detail?ct=503316480&z=undefined&tn=baiduimagedetail&ipn=d&word=python&step_word=&ie=utf-8&in=&cl=2&lm=-1&st=undefined&hd=undefined&latest=undefined©right=undefined&cs=3007672121,16493484&os=3426994009,3290649938&simid=3007672121,16493484&pn=3&rn=1&di=86570&ln=1824&fr=&fmq=1635834331044_R&fm=&ic=undefined&s=undefined&se=&sme=&tab=0&width=undefined&height=undefined&face=undefined&is=0,0&istype=0&ist=&jit=&bdtype=0&spn=0&pi=0&gsm=0&objurl=https%3A%2F%2Fgimg2.baidu.com%2Fimage_search%2Fsrc%3Dhttp%253A%252F%252Fs2.51cto.com%252Foss%252F201712%252F11%252Fd7bfd1805d9d1a315b0e6fe0cbc9a0dd.jpg%26refer%3Dhttp%253A%252F%252Fs2.51cto.com%26app%3D2002%26size%3Df9999%2C10000%26q%3Da80%26n%3D0%26g%3D0n%26fmt%3Djpeg%3Fsec%3D1638426330%26t%3D24d0deaa9fa2092ef857a307c01fcae1&rpstart=0&rpnum=0&adpicid=0&nojc=undefined&dyTabStr=MCwzLDEsMiw2LDQsNSw4LDcsOQ%3D%3D" alt="">
<p>
Python将被加入高考科目!
</p>
</li>
<li>
<h2>Java</h2>
<img src="" alt="">
<p>java介绍!</p>
</li>
<li>
<h2>H5</h2>
</li>
</ul>
</body>
</html>
css语法
css的作用:负责网页内容的样式和局部 - 对网页进行化妆
1. css语法:
选择器{属性1:属性值1;属性2:属性值2;…}
属性 - 不一样的属性决定不同的样式
选择器 - 选中标签
2.css选择器
1) 标签选择器,元素选择器
将标签名作为选择器,选中所有指定标签,例如:p{} - 选中所有p标签 img{} - 选中所有的img标签
2) id选择器
在标签的id属性前加#作为一个选择器,选中id值是指定值的标签。
例如: #abc{} - 选中id属性值为abc的标签
注意:id属性是唯一的
3) class选择器,类选择器
在class属性前加 . 作为一个选择器,选中class属性值是指定值的标签
例如: . x{} - 选中class属性值为x的标签
注意:同一个class属性值可以有多个;同一个标签可以有多个class
.x.y{} - 选中class属性值同时包含x和y的标签
4) 群组选择器
将多个独立的选择器用逗号隔开作为一个选择器,选中每个独立选择器选中的内容
例如:
a,p{} - 选中所有的a标签和p标签
#p1,.c1 - 选中id值为p1和class值为c1的标签
a,.c1,.c2 - 选中所有的a标签和class值为c1和c2的标签
5) 后代选择器
将多个独立的选择器用空格隔开作为一个选择器
div p{} - 选中在div中的p标签(p只要是div的后代就行)
6) 子代选择器
将多个独立的选择器用 > 隔开作为一个选择器
div>p{} - 选中在div中的p标签(p必须是div的子代就行)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
#abc,.c1{
color:red;
}
<!-- #jSearchHeroDiv>li>a>p #jSearchHeroDiv p-->
</style>
</head>
<body>
<!-- c1和c2都是 '我是段落1' 这个p标签的class值 -->
<p class="c1 c2 c3">我是段落1</p>
<a href="" class="c2">我是超链接1</a>
<p id="abc">我是段落2</p>
<p>我是段落3</p>
<a href="" class="c1">我是超链接2</a>
<div id="box">
<p>段落11</p>
<div class="c2">
<a href="">超链接33</a>
<ul>
<li>
<p>我是电影名称</p>
<a href="">超链接11</a>
</li>
<li>
<a href="">超链接22</a>
</li>
</ul>
<p>段落22</p>
</div>
<div class="c1">
<p>段落33</p>
</div>
</div>
</body>
</html>
bs4网页解析语法
运行环境:from bs4 import BeautifulSoup
0. 获取网页内容
content = open(‘网页.html’).read()
print(content)
1. 通过网页内容创建BeautifulSoup对象(这儿的网页内容就是需要解析网页数据)
BeautifulSoup(html代码, ‘lxml’)
soup就相当于html标签
soup = BeautifulSoup(content, ‘lxml’)
print(soup)
2. 获取标签
标签对象.select(css选择器) - 返回选择器选中的所有标签,返回一个列表,列表中的元素是标签对象
标签对象.select_one(css选择器) - 返回选择器选中的第一个标签,返回一个标签对象
result = soup.select('p')
print(result) # [<p>什么都卖!</p>, <p>泡面</p>, <p>火腿肠</p>, <p>可乐</p>]
result = soup.select_one('p')
print(result) # <p>什么都卖!</p>
练习:获取所有商品名称对应的标签
result = soup.select('li>p')
print(result)
# select_one、select前面的标签决定查找范围:在指定标签中通过选择器获取标签
li1 = soup.select_one('li')
result = li1.select('p')
print(result) # [<p>泡面</p>]
3. 获取双标签标签内容
标签对象.text - 获取指定标签的内容
p1 = soup.select_one('p')
print(p1.text) # 什么都卖!
# for tag in soup.select('p'):
# print(tag.text)
result = [x.text for x in soup.select('p')]
print(result)
4.获取标签属性
标签对象.attrs[属性名]
注意:标签对象.attrs返回的是一个字典,标签的每个属性就是一个键值对
img = soup.select_one('img')
img_url = img.attrs['src']
for x in soup.select('img'):
print(x.attrs['src'])
练习:获取网页中所有商品的信息
all_li = soup.select('li')
all_data = []
for li in all_li:
data = {}
data['name'] = li.select_one('p').text
data['price'] = float(li.select_one('.price').text[1:])
data['img'] = li.select_one('img').attrs['src']
all_data.append(data)
print(all_data)
豆瓣电影爬取
运行环境:import requests
from bs4 import BeautifulSoup
1. 获取网页内容
def get_net_data(url: str):
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
response = requests.get(url, headers=headers)
return response.text
def analysis_data(html: str):
soup = BeautifulSoup(html, 'lxml')
all_li = soup.select('ol>li')
all_data = []
for li in all_li:
data = {}
# 电影名称
name = li.select_one('.title').text
data['name'] = name
# 评分
score = li.select_one('.rating_num').text
data['score'] = float(score)
# 总结
message = li.select_one('.inq').text
data['message'] = message
# 图片地址
pic_url = li.select_one('.pic img').attrs['src']
data['url'] = pic_url
all_data.append(data)
return all_data
if __name__ == '__main__':
result = get_net_data('https://movie.douban.com/top250')
result = analysis_data(result)
print(result)