网页是由 HTML 、 CSS 、JavaScript 组成的。
HTML 是用来搭建整个网页的骨架,而 CSS 是为了让整个页面更好看,包括我们看到的颜色,每个模块的大小、位置等都是由 CSS 来控制的, JavaScript 是用来让整个网页“动起来”,这个动起来有两层意思,一层是网页的数据动态交互,还有一层是真正的动,比如我们都见过一些网页上的动画,一般都是由 JavaScript 配合 CSS 来完成的。
我们可以在google浏览器中使用F12按键来查看当前网页的Elements元素
首先,整个文档是以 DOCTYPE 来开头的,这里定义了文档类型是 html ,整个文档最外层的标签是 ,并且结尾还以 来表示闭合。这是为了使整个网页元素的结构显得具有对称性。
整个 HTML 文档一般分为 head 和 body 两个部分,在 head 头中,我们一般会指定当前的编码格式为 UTF-8 ,并且使用 title 来定义网页的标题,这个会显示在浏览器的标签上面。比如这里的title设置的就是Demo,所以这个网页的文件名就是Demo.html。
body 中的内容一般为整个 html 文档的正文,html的标签由h1到h6六个标签构成,这里的网页中的h1后面是‘Hello Python’,herf属性包含链接的URL地址。
于是上面的网页代码表示的网页格式就是如下,网页名称是“Demo.html”。
HTML 代码文档可以视作树结构。这种结构被称为节点树。树结构的示意图如下。
Request库的调用:
上图中显示的就是request.get函数的作用 ,可以获取一个网页中源代码中的Element元素,返回的数据类型是str。
通过观察网站,我们可以发现python之禅”的索引中的这段话在一个特殊的容器中,通过审查元素,使用快捷键Ctrl+shift+c快速定位到这段话也可以发现这段话包围在pre标签中,因此我们可以由这个特定用find函数找出具体内容。于是我们可以用下面的这段代码取出这段索引。
当然我们也可以使用Python自带的urllib完成以上的操作,具体代码如下:
下面是使用request.get来爬取豆瓣Top250的电影名称以及对应的剧照。
其中的电影名称以及剧照是在‘alt’的范围内。
import requests
import os
if not os.path.exists('image'):
os.mkdir('image')
def parse_html(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"}
res = requests.get(url, headers=headers)
text = res.text
item = []
for i in range(25):
text = text[text.find('alt')+3:]
item.append(extract(text))
return item
def extract(text):
text = text.split('"')
name = text[1]
image = text[3]
return name, image
def write_movies_file(item, stars):
print(item)
with open('douban_film.txt','a',encoding='utf-8') as f:
f.write('排名:%d\t电影名:%s\n' % (stars, item[0]))
r = requests.get(item[1])
with open('image/' + str(item[0]) + '.jpg', 'wb') as f:
f.write(r.content)
def main():
stars = 1
for offset in range(0, 250, 25):
url = 'https://movie.douban.com/top250?start=' + str(offset) +'&filter='
for item in parse_html(url):
write_movies_file(item, stars)
stars += 1
if __name__ == '__main__':
main()