python爬虫基础使用urllib
2021/12/27 20:08:23
本文主要是介绍python爬虫基础使用urllib,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# urllib基础操作 # 爬虫基础-Urllib发送请求 import urllib.request import urllib.parse # 目标网址(一个竞赛网址) url = 'https://www.datafountain.cn/competitions' # 通过request配置请求参数 ''' urllib. request. Request ( url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None) data 字节流格式,若是字典格式,先用urllib.parse.urlencode()转换 headers 请求头 origin_req_host 请求放的host名称或ip地址 method 请求方法 ''' headers = { 'User-Agent':'xxxxx' } req = urllib.request.Request(url,headers=headers) # 发送请求,返回整个网页源码 ''' urllib . request . urlopen(url, data=None, [timeout]*, cafile=None, capath=None, cadefault=False, context=None ) data 以表单的形式提交,需要将data参数转为bytes格式 timeout 设置响应时间 response = urllib.request.urlopen(url,data=data) ''' response = urllib.request.urlopen(req,timeout=1) # 获取响应 # 获取响应状态码 if response.status == 200: # 读取整个网页 print(response.read().decode('utf-8')) # 获取响应头信息 print(response.getheaders())
高级操作
需要用到处理器的集合工具Handler,request中的BaseHandler是其它Handler的父类。Handler常用处理器类有:
- HTTPDefaultErrorHandler :用于处理响应错误,错误都会抛出HTTPError 类型的异常
- HTTPRedirectHandler :用于处理重定向
- HTTPCookieProcessor: 用于处理cookies
- ProxyHandler :用于设置代理默认为空
- HTTPPasswordMgr :用于管理密码,它维护了用户名和密码的表
- HTTPBasicAuthHandler: 用于管理认证,如果一个链接打开时需要认证,那么可以用它来解决认证问题
简单身份验证
from urllib.request import HTTPPasswordMgrWithDefaultRealm,build_opener,HTTPBasicAuthHandler from urllib.error import URLError # 如果打开一个界面需要身份验证,则可以用此方法解决,但不同于模拟登陆 # 目标网址 url = 'change' # 身份信息 username = 'xxxxxx' password = 'xxxxxx' # 构造管理器 p = HTTPPasswordMgrWithDefaultRealm() p.add_password(None,url,username,password) auth_handler = HTTPBasicAuthHandler(p) opener = build_opener(auth_handler) try: # 发送请求,接受响应 result = opener.open(url) html = result.read().decode('utf-8') print(html) except URLError as e: print(e.reason)
简单代理
from urllib.error import URLError from urllib.request import ProxyHandler,build_opener # 目标网址 url = 'https://www.baidu.com' # 构建代理池 proxy_Handler = ProxyHandler({ 'http' : 'http://127.0.0.1:9743 ', 'https' : 'https://127.0.0.1:9743 ' }) # 构建opener opener = build_opener(proxy_Handler) try: response = opener.open(url) if response.status == 200: print(response.read().decode('utf-8')) else: print('ByeBye') except URLError as e: print(e.reason) # [WinError 10061] 由于目标计算机积极拒绝,无法连接。
简单保存cookies
from urllib.request import HTTPCookieProcessor,build_opener from http import cookiejar ''' cookiejar是cookie类的的一个管理类,可以获取,添加,存储等等操作 ''' # 目标网址 url = 'https://www.baidu.com' # 构建cookiejar类作为HTTPCookieProcessor的参数 cookies = cookiejar.CookieJar() handler = HTTPCookieProcessor(cookies) opener = build_opener(handler) # 响应 opener.open(url) for item in cookies: print(item.name + ":" + item.value) # 保存到txt文件 cookies_save = cookiejar.MozillaCookieJar("cookies.txt") handler_save = HTTPCookieProcessor(cookies_save) opener_save = build_opener(handler_save) opener_save.open(url) cookies_save.save(ignore_discard=True , ignore_expires=True) ''' ignore_discard:是否保存需要被抛弃的cookie ignore_expires:是否保存过期的cookie '''
解析链接:urllib.parse
# 简单解析url from urllib.parse import urlparse ''' urllib.parse.urlparse(urlstring, scheme=”", allow_fragments=True) 所有url都符合同一规则’scheme://netloc/path ;params?query#fragment‘ scheme : 如果url没有指明scheme则使用默认协议 allow_fragments : 是否忽略fragment ''' # urlparse url = 'http://www.baidu.com/index.html;user?id=5#comment' result = urlparse(url) print(result) # urlunparse(长度必须是6位) from urllib.parse import urlunparse data = ['http','www.baidu.com','/index.html','user','id=5','comment'] print(urlunparse(data)) # urlsplit(会将path与params合并) from urllib.parse import urlsplit res = urlsplit(url) print(res) # urlunsplit(长度是5位) from urllib.parse import urlunsplit mark = ['http','www.baidu.com','/index.html;user','id=5','comment'] print(urlunsplit(mark)) # 另一种解析大方式:urljoin ''' urljoin(base_url,new_url) urljoin会分析base_url的scheme,netloc,path。如果base的前三项在new中不存在则new作为base的补充 如果存在,就用new代替base ''' #urlencode() ''' 将字典化为字符串,例: params = { ’name':'germey', age : 22 } urlencode(params) = 'name=germey&age=22' ''' # parse_qs() ''' 反序列化 将字符串转为字典 ''' # quote() ''' 避免中文出现乱码现象 将中文字转化为url编码 ''' # unquote() ''' 将url编码转为中文 '''
Robots 协议
机器人协议,规定哪些页面可以爬,哪些不行。
# 简单的判断页面能否爬 from urllib.robotparser import RobotFileParser #构建机器人解析对象 rp = RobotFileParser() print(rp.can_fetch(url + '/robot.txt'))
这篇关于python爬虫基础使用urllib的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程