网络爬虫可以根据需要进行配置,例如设置爬取的深度、限制爬取的速度,以及处理反爬机制等
网络爬虫根据不同的目标和应用可以分为多种类型,如通用爬虫、聚焦爬虫、增量爬虫等
网络爬虫在很多领域都有应用,如搜索引擎、数据挖掘、舆情分析、价格比较等
urllib是Python的标准库之一,用于处理URL相关的操作
urllib库包含四个子模块:
"""
urllib.request:请求模块,用于打开和读取URL
urllib.error:异常处理模块,捕获urllib.error抛出异常
urllib.parse:URL解析,爬虫程序中用于处理URL地址
urllib.robotparser:解析robots.txt文件(一个遵循Robots Exclusion Protocol(机器人排除协议)的文本文件),判断目标站点哪些内容可爬,哪些不可以爬
"""
# 1)发送Get、Post请求
'''
urlopen(url,data,timeout)
'''
import urllib.request
with urllib.request.urlopen('https://www.example.com') as resp:
# getcode() 获取网页状态码
print(resp.getcode())
# read() 获取服务器响应的内容,读取整个网页数据
content = resp.read().decode('utf-8')
print(content)
HTTPResposne响应对象的其它成员:
'''
getheaders():获取请求头内容
getheader(name):获取指定请求头
readline():读取网页一行数据
readlines():读取网页多行数据
status:获取响应状态码
'''
# 2)Request()类 发送指定类型请求
'''
urllib.request.Request(url,data,headers,method)
'''
import urllib.parse
# 转换数据类型为bytes(data参数类型必须为bytes类型)
data = urllib.parse.urlencode({
"key": "value"}).encode()
headers = {
"User-Agent": "Mozilla/5.0"}
req = urllib.request.Request(url='https://www.example.com', data=data, method='POST', headers=headers)
with urllib.request.urlopen(req) as resp:
# getcode() 获取网页状态码
print(resp.status)
# read() 获取服务器响应的内容,读取整个网页数据
content = resp.read().decode('utf-8')
print(content)
# 解析URL:
'''
urlparse(url,scheme协议类型,allow_fragments=True是否忽略URL中的fragment部分)
'''
# 标准的URL格式:
'''
scheme://netloc/path;params?query#fragment
'''
# 说明:
'''
scheme:URL协议
netloc:域名和端口
path:路径
params:最后一个路径元素参数
query:查询字符串
fragment:片段标志
'''
from urllib.parse import urlparse
url = 'https://www.example.com/path?query=hello#fragment'
parsed_url = urlparse(url)
print(parsed_url.scheme) # https
print(parsed_url.netloc) # www.example.com
print(parsed_url.path) # /path
print(parsed_url.query) # query=hello
print(parsed_url.fragment) # fragment
# 其它方法:
'''
urlunparse():构建URL,与urlparse()方法逻辑相反
urljoin():方法用于拼接链接
urlencode():格式化URL请求参数
quote():编码URL特殊字符,尤其是转换中文字符
unquote():解码URL特殊字符
'''
urllib.error模块提供的异常类:
import urllib.error
'''
error.URLError:OSError的一个子类,用于处理URL相关的错误,如无法连接到服务器、网络问题等
error.HTTPError:URLError的一个子类,用于处理HTTP相关的错误,如页面不存在(404)、权限问题等
'''
异常类对象的属性:
'''
e.code:响应的状态码
e.reason:获取原因字符串
e.headers:获取响应的头部信息
'''
requests是一个常用的第三方库,用于发送HTTP请求和处理响应。它提供了简洁而直观的API,使得发送请求和处理数据变得非常方便
'''
1)requests.request(method, url, params, data, headers, cookies)
- method: 请求方式,对应以下各方法
- url: 页面链接
- params: url参数,字典或字节流类型
- data: 请求内容、请求体,字典、字节序列或文件对象类型
- headers: HTTP自定义请求头,字典类型
- cookies: 请求中的cookie,字典类型
- json: 请求内容、请求体,JSON格式的数据
- files: 请求内容、请求体,用于传输文件
- timeout: 设置请求超时时间,单位秒
- allow_redirects: 重定向开关,默认为True
- proxies: 设置访问代理服务器,可以增加登录认证,字典类型
2)requests.get() # 获取HTML网页的主要方法,对应HTTP的GET
3)requests.head() # 获取网页头信息的方法,对应HTTP的HEAD(HTTP 头部本质上是一个传递额外重要信息的键值对)
4)requests.post() # 向HTML网页提交POST请求,对应HTTP的POST
5)requests.put() # 向HTML网页提交PUT请求,对应HTTP的PUT
6)requests.delete() # 向HTML网页提交删除请求,对应HTTP的DELETE
7)requests.patch() # 向HTML网页提交局部修改请求,对应HTTP的PATCH
'''
# 1)基本用法
response = requests.get('https://httpbin.org/get')
print(response.text)
# 2