上一篇介绍了爬虫的原理以及要实现爬虫的三个主要步骤:下载网页-分析网页-保存数据。
本篇从第一步开始实操如何使用 Python 下载网页。
1. 获取网页内容
import urllib3
# 将要下载的网址保存在 url 变量中
url = "http://jandan.net/p/date/2022/09/21"
# 创建一个 PoolManager 对象,命名为 http
http = urllib3.PoolManager()
# 调用 http 对象的 request 方法,第一个参数传一个字符串 "GET"
# 第二个参数则是要下载的网址,也就是我们的 url 变量
# request 方法会返回一个 HTTPResponse 类的对象,我们命名为 response
response = http.request("GET", url)
# 获取 response 对象的 data 属性,存储在变量 response_data 中
response_data = response.data
# 调用 response_data 对象的 decode 方法,获得网页的内容,存储在 html_content
# 变量中
html_content = response_data.decode()
# 打印 html_content
print(html_content)
注意:response 对象的 data 属性也是一个对象,是一个 bytes 类型的对象。通过调用 decode 方法,可以转化成我们熟悉的字符串。
2. 将网页保存到文件
with open('jiandan.html','w',encoding='utf-8') as f:
f.write(html_content)
将以上代码封装为函数:
# 第一个函数,用来下载网页,返回网页内容
# 参数 url 代表所要下载的网页网址。
def download_content(url):
http = urllib3.PoolManager()
response = http.request("GET", url)
response_data = response.data
html_content = response_data.decode()
return html_content
# 第二个函数,将字符串内容保存到文件中
# 第一个参数为所要保存的文件名,第二个参数为要保存的字符串内容的变量
def save_to_file(filename, content):
with open(filename, 'w', encoding='utf-8') as f:
f.write(content)
url = "http://jandan.net/p/date/2022/09/21"
html_content = download_content(url)
save_to_file("jiandan.html", html_content)
3. 实现动态网页的下载
前提:已经安装selenium
解决方法:使用selenium下载动态网页
# 从 selenium 库中导入 webdriver 类
from selenium import webdriver
# 创建一个 Chrome 浏览器的对象
driver = webdriver.Chrome()
# 使用 Chrome 对象打开 url(就是刚才豆瓣电视剧的 url)
url = "https://movie.douban.com/tv"
driver.get(url)
def save_to_file(filename, content):
with open(filename, 'w', encoding='utf-8') as f:
f.write(content)
html_content = driver.page_source
save_to_file("douban_tv1.html", html_content)
运行代码,可以看到 Chrome 被打开并加载网页,等电视剧列表都加载完之后,在 编辑器中可以看到 double_tv1.html 也被成功创建。