数据分析2 -- 模拟请求下载真实网页

上一篇介绍了爬虫的原理以及要实现爬虫的三个主要步骤:下载网页-分析网页-保存数据。

本篇从第一步开始实操如何使用 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 也被成功创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值