Python 爬取网页内容
题目
使用 Python 编写一个程序,获取豆瓣电影网页中的一周口碑榜电影名称并输出为一个文本文件。
相关网址
https://movie.douban.com/chart
程序设计思路
访问网址读取网页内容
- 创建 HTTP 请求头的用户代理(User-Agent)。
- 使用
requests
软件包中的get()
方法,指定请求头访问并获取网页内容。 - 设置
encoding
为utf-8
设置读取网页的编码,避免读取内容为乱码。
备注
HTTP 请求头设置用户代理的目的是向服务器提供虚拟的用户信息,大部分的网站都有防爬虫的机制,利用用户代理可以越过一些简易的反爬虫机制,若不使用用户代理,则可能读取失败
匹配爬取的内容
- 观察网页中一周口碑榜中各电影名称的 HTML 布局结构。
- 使用
re
软件包中的compile
方法创建针对一周口碑榜电影名称的正则表达式。 - 使用
findall()
方法执行匹配操作并获取匹配结果。
输出为文本文件
- 使用
open()
方法打开一个 txt 文件,指定w
模式,将编码设置为utf-8
。 - 使用
for
循环语句和write()
方法将匹配的内容写入该文本文件。 - 使用
close()
方法关闭文本文件。
使用 open()
方法的常用打开模式
模式 | 说明 |
---|---|
"w" | 用于打开文件进行写入,如果文件存在则会清空文件内容,文件不存在则会创建一个新文件,文件指针位于文件的开头。 |
"r" | 用于打开文件进行读取,如果文件不存在,会发生错误,文件指针位于文件的开头。 |
"a" | 用于在文件末尾追加内容,如果文件不存在则会创建一个新文件,文件指针位于文件的末尾。 |
参考答案
reptile.py
import requests
import re
url = "https://movie.douban.com/chart"
head = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'} # 添加用户代理的HTTP请求头
resp = requests.get(url, headers=head) # 通过网址访问并获取网页内容
resp.encoding = "utf-8" # 设置获取的内容编码为utf-8
pattern = re.compile(
r'<a onclick="moreurl\(this, \{from:\'mv_week\'\}\)".*?class="">\s*(.*?)\s*</a>') # 创建正则表达式匹配一周口碑榜中的电影名称
movie_names = pattern.findall(resp.text) # 执行正则表达式的匹配并获取匹配结果
file = open("movie.txt", "w", encoding="utf-8") # 打开一个文本文件,"w"模式下若文件不存在将会自动创建
file.write("一周口碑榜:\n")
for name in movie_names: # 将匹配出的电影名称逐行导入文本文件
file.write(name.strip())
file.write('\n')
file.close() # 关闭文件