Python-爬虫(基础概念、常见请求模块(urllib、requests))

1.基础概念

爬虫:模拟客户端(浏览器)发送网络请求,接收请求返回的响应,一种按照一定的规则,自动地抓取互联网信息的程序.

爬虫流程:

  1. 获取url。
  2. 向url发送请求,并且获取相应。
  3. 从相应中获取url,并且持续获取相应。
  4. 从响应中提取数据并保存。

常见的抓取方式

  1. 在网页中我们能看到各种各样的信息,最常见的便是常规网页,它们对应着HTML.代码,而最常抓取的便是HTML源代码。
  2. 有些网页返回的不是HTMIL代码,而是一个JSON字符串(其中API接口大多采用这样的形式),这种格式的数据方便传输和解析,它们同样可以抓取,而且数据提取更加方便。
  3. 各种二进制数据,如图片、视频和音频等。利用爬虫,我们可以将这些二进制数据抓取下来,然后保存成对应的文件名。
  4. 还可以看到各种扩展名的文件,如CSS、JavaScript和配置文件等,这些其实也是最普通的文件,只要在浏览器里面可以访问到,就可以将其抓取下来。

上述内容其实都对应各自的URL,是基于HTTP或HTTPS协议的,只要是这种数据,爬虫都可以抓取。

有些网页的HTML文本仅为空壳。
这是一个非常常见的问题。现在网页越来越多地采用Ajax、前端模块化工具来构建,整个网页可能都是由JavaScript渲染出来的,也就是说原始的HTML代码就是一个空壳。此时这种情况不能简单的使用HTML库。

2.测试爬虫流程

"""
爬虫流程:
1. 获取url。
2. 向url发送请求,并且获取相应。
3. 从相应中获取url,并且持续获取相应。
4. 从响应中提取数据并保存。
"""

import requests

# 获取url
url = 'https://www.baidu.com/'

# 向url发送HTTP请求
response = requests.get(url)

# 从响应中提取数据并保存。
print(response)  # <Response [200]>
# print(response.text) 出现乱码
print(response.content.decode())  # 解决乱码,decode默认utf-8编码

在这里插入图片描述

3.爬虫常见请求模块(uellib、requests)

requets库:基于urllib模块实现。向服务器发送请求库。

Ⅰurllib

urllib模块:它是Python内置的HTTP请求库,不需要额外安装即可使用。它包含如下4个模块。(与requests区分开)

  1. request:它是最基本的HTTP请求模块,可以用来模拟发送请求。需要给库方法传入URL以及额外的参数,就可以模拟实现这个过程了。
  2. error:异常处理模块,如果出现请求错误,可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止。
  3. parse:一个工具模块,提供了许多URL处理方法,比如拆分、解析、合并等。
  4. robotparser:主要是用来识别网站的 robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,用得比较少。

使用urllib的 request模块,可以方便地实现请求的发送并得到响应。下面是具体用法。

urlopen:
urllib.request模块提供了最基本的构造HITP请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理授权验证(authentication)、重定向(redirection)、浏览器Cookies 以及其他内容。

使用方法:

import urllib.request

url = 'https://www.baidu.com/'

response = urllib.request.urlopen(url)

print(response.read().decode('utf-8'))

print(type(response))

在这里插入图片描述
可以看出返回的是一个http客户端相应类。

这个类有自己的方法,主要包含read、readinto、getheader、getheaders、fileno等方法,和msg、version、status、reason、debuglevel、closed等属性。

如果需要向请求报文中添加信息,可以修改函数的data参数
在这里插入图片描述

注意:
data参数是可选的。如果要添加该参数,需要使用bytes方法将参数转化为字节流编码格式的内容,即 bytes类型。另外,如果传递了这个参数,则它的请求方式就不再是 GET方式,而是 POST方式。

Ⅱ requests

urllib这个库已经很久了,requests库封装了urllib库,使用更简单。基本使用如下图

import requests
import webbrowser  # 自动打开网页

key = input('输入查询内容')

print(key)

url = 'https://www.baidu.com/s?wd=' + key

# 系统信息,浏览器信息
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36"
}

response = requests.get(url, headers=headers)

html = response.content.decode('utf-8')

with open('baidu-copy.html', 'w', encoding='utf-8') as file:
    file.write(html)

webbrowser.open('baidu-copy.html')

其中浏览器信息可以在网页中查找:
在这里插入图片描述
注意测试代码时关闭代理服务器

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NUC_Dodamce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值