Python静态网页爬虫实例 实训第二天

今天是Python实训第二天。

Python静态网页爬虫实例 实训第二天

前端基础

  • 块级元素:不论内容有多大,总是占一行
    • h1 标题标签
    • p 段落标签
    • div 标签
    • img 图片标签
    • ol 有序列表
    • ul 无序列表
  • 行内元素:自身有大小,可以和别的元素在一起并排排列
    • 可设置宽高属性的行内元素
    • 行级元素中的联元素,不可设宽高
      • span
      • a 超链接标签
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--块级元素 不论内容有多大,总是占一整行-->
<h1>天气变化,注意保暖</h1>
<p>虽然天气很冷,峰哥嗓子很疼,但是还是要上课</p>
<div style="height: 100px;width: 100px;background: green"></div>
<img src="Class01.html">
<!--有序列表的标签类型-->
<ol type="I">
<li>周末出去玩一玩,欣赏美景</li>
<li>毕业了,找个高薪的工作或者考上理想的学校</li>
<li>找个对的人,白首到老</li>
</ol>
<ul>
<li>淘宝</li>
<li>京东</li>
<li>小米商城</li>
</ul>

<!--行内元素 自身有大小 可以和别的在一起 并排排列-->
<!-- 下拉框 -->
<select>
<option>威海</option>
<option>济南</option>
<option>烟台</option>
</select>
<!--可设置宽高属性的行内元素-->
<button style="height: 50px; width: 50px;">按钮</button>
<input type="password">
<!--行级元素中的内联元素 不可设置宽高-->
<span> 春暖花开 </span>
<a>你的心里</a>
</body>
</html>

HTML+CSS实现百叶窗效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<!--百叶窗效果-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Shutter</title>
<!-- 内部样式 -->
<style type="text/css" rel="stylesheet">
/* 通配符 取消原有属性 */
*{
padding: 0px;
margin: 0px;
}
/* 标签选择器 */
body{
background: black;
}
/* id 选择器 # 一般认为id唯一 修饰具有该id的标签 */
#main{
height: 400px;
width: 800px;
/*background: aqua;*/

/* 保证水平方向自适应 结果是居中*/
margin: 100px auto;

/* 超出部分隐藏 */
overflow: hidden;
}
/* 后代选择器 父元素选择器+当前元素的选择器*/
#main li{
/* */
height: 400px;
width: 160px;

/* 横向排列列表 */
float: left;

/* 取消列表标记方式 */
list-style: none;
}
/* */
#main img{
height: 100%;
width: 600px;
}
/* 鼠标悬停 全部变小 */
#main ul:hover li{
width: 50px;
}

/* 鼠标悬停 单个变大 提高优先级 */
#main li:hover {
width: 600px !important;

}
/*类选择器 修饰带有相同的带有类属性的标签*/
.li{

}
</style>
</head>
<body>
<!-- 标签的一级子标签一般使用id选择器进行选择-->
<div id="main">
<ul>
<li class="li"><img src="img/1.jpg"></li>
<li class="li"><img src="img/2.jpg"></li>
<li class="li"><img src="img/3.jpg"></li>
<li class="li"><img src="img/4.jpg"></li>
<li class="li"><img src="img/5.jpg"></li>

</ul>
</div>

</body>
</html>

使用Requests库和urllib.request 爬取王者荣耀皮肤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import requests
from urllib import request
url = 'https://pvp.qq.com/web201605/js/herolist.json'
photo_url = 'http://game.gtimg.cn/images/yxzj/img201606/hero-info/'
save_path = 'd://hero//'
# 发出get请求网址 进行json格式化
# json是列表和字典的组合
response = requests.get(url).json()

for hero in response:
# 根据字典中的键获取值

number = hero['ename']
heroName = hero['cname']
print(heroName + ':',end='')
skin_name = hero['skin_name']
# 分割字符串方法,返回一个列表
skins = skin_name.split('|')
print(skins)
for i in range(len(skins)):
dUrl = photo_url + str(number) + '/' + str(number) + \
'-bigskin-' + str(i+1) + '.jpg'
savePath = save_path + heroName + '-' + skins[i] + '.jpg'
try:
request.urlretrieve(dUrl, savePath)
except :
print(dUrl)

使用BeautifulSoup库和urllib.request 爬取爱思助手铃声资源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 导入urllib库中的子模块request, 之后可以通过request直接调用
# from urllib import request
from bs4 import BeautifulSoup
# 导入整个urllib库, 之后必须通过urllib.request调用
# import urllib

# 仅导入urllib的子模块request, 之后必须通过urllib.request调用
import urllib.request
import os

# 目标站点的地址
url = 'https://www.i4.cn/ring_1_0_1.html'

# 发送请求并接受响应
response = urllib.request.urlopen(url)

# 返回对象包括响应头和响应体
#print(response)

# 读取响应体
content = response.read()
#print(content)

# 获取一个解析对象,构造方法传入要解析内容和解释器
soup = BeautifulSoup(content, 'html.parser')

# 根据类选择器找到对应的标签的内容 select返回一个列表 根据下标获取元素中内容
jbox = soup.select('.jbox')[0]

kbox = jbox.select('.kbox')[0]

# print(jbox)
# print(kbox)

# 获取所有音乐
ringList = kbox.select('.ring_list')
# print(ringList)

# 判断该文件夹是否存在,不存在则创建
folderName = 'music'
if folderName not in os.listdir():
os.makedirs(folderName)

sfolderName = 'd://music'

for ringItem in ringList:
title = ringItem.select('.title')[0].string
dUrl = ringItem.select('.audio_play')[0]['data-mp3']
#print(title)
#print(dUrl)

# 下载
#urllib.request.urlretrieve(dUrl, sfolderName + '//' + title + '.mp3')
print(title + '.mp3' + ' Downloaded')

# 创建并写入文件, wb是二进制内容的读写权限
file = open('music.html', 'wb')
file.write(content)
file.close()