Urllib库函数、代理、爬取案例

news/2024/9/20 15:01:20

Urllib库函数、代理、爬取案例

urllib库-urlopen函数用法

from urllib import  request
resp=request.urlopen('http://www.baidu.com')
print(resp.read())

部分结果

b'<!DOCTYPE html><!--STATUS OK-->\n\n\n    <html><head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta content="always" name="referrer"><meta name="theme-color" content="#2932e1"><meta name="description"

urllib库-urlretrieve函数

request.urlretrieve('http://www.baidu.com/','baidu.html')
# 直接将百度网页html文件下载
request.urlretrieve('https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fwww.huaduhn.com%2Fuserfiles%2F322%2F201407%2F11%2F201407110004.jpg&refer=http%3A%2F%2Fwww.huaduhn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1627958798&t=b7a5c2084792e07337bf68ca56d4f58b','dangqi.jpg')
# 将图片下载至对应路径

在这里插入图片描述

urlencode函数

用浏览器发送请求的时候,如果url中包含了中文或是其他特殊字符,那么浏览器会自动给我们进行编码。而如果使用代码发送请求,那必须手动进行编码,这是就应该使用urlencode函数实现。urlencode可以把字典数据转换为URL编码的数据

from urllib import parseparams={'name':'张三',"age":18,'greet':'hello world'}result=parse.urlencode(params)print(result)
'''
结果:
name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world
'''
url='http://www.baidu.com/s'
params1={"wd":"刘德华"}
qs=parse.urlencode(params1)
print(qs)
# 结果:wd=%E5%88%98%E5%BE%B7%E5%8D%8Eurl=url+"?"+qs  #https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6  形成形如这样的形式:/s?wd=......
resp=request.urlopen(url)
print(resp.read())'''
部分结果:
[b'<!DOCTYPE html><!--STATUS OK-->\n']
[b'\n', b'\n', b'    <html><head><meta http-equiv="Content-Type" 
content="text/html;charset=utf-8"><meta http-equiv="X-UA-Compatible" 
content="IE=edge,chrome=1"><meta 
content="always" name="referrer"><meta 
name="theme-color" content="#2932e1"><meta name="description" 
content="\xe5\x85\xa8\xe7\x90\x83\xe9\xa2
\x86\xe5\x85\x88\xe7\x9a\x84\xe4\xb8\xad'''

parse_qs函数:

可以将编码后的url参数进行解码

params={'name':'张三',"age":18,'greet':'hello world'}
result=parse.urlencode(params)
result1=parse.parse_qs(result)
print(result)
print(result1)'''
name=%E5%BC%A0%E4%B8%89&age=18&greet=hello+world
{'name': ['张三'], 'age': ['18'], 'greet': ['hello world']}'''

urllib库urlparse和urlsplit函数用法

对一个url中的各个组成部分进行分割,则可用以上两函数

from urllib import  request,parse
url='http://www.baidu.com/s?username=zhiliao'
result=parse.urlsplit(url)
result1=parse.urlparse(url)
print(result)
print(result1)
print('scheme:',result.scheme)
print('netloc:',result.netloc)
print('path:',result.path)
print('query:',result.query)'''
结果:
SplitResult(scheme='http', netloc='www.baidu.com', path='/s', query='username=zhiliao', fragment='')
ParseResult(scheme='http', netloc='www.baidu.com', path='/s', params='', query='username=zhiliao', fragment='')
scheme: http
netloc: www.baidu.com
path: /s
query: username=zhiliao'''

用Request爬取拉勾网职位信息-实战

from urllib import request
url='https://www.lagou.com/'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'
}req=request.Request(url,headers=headers)resp=request.urlopen(req)
print(resp.read())'''
部分结果:
b'<!DOCTYPE html>\n<html>\n<head>\n\t<!-- meta -->\n\t<meta charset="UTF-8">\n
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />\n
<meta name="renderer" content="webkit">\n<meta property="qc:admins" content="23635710066417756375" />\n
<meta name="baidu-site-verification" content="QIQ6KC1oZ6" />\n
<meta content="\xe6\x8b\x89\xe5\x8b\xbe\xe6\x8b\x9b\xe8\x81\x98,
'''url='https://www.lagou.com/beijing-zhaopin/Python/?labelWords=label'headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.64'}
req=request.Request(url,headers=headers,method='GET')
resp=request.urlopen(req)
print(resp.read())

ProxyHander处理器(代理设置)

使用urllib.request中ProxyHander()方法来设置代理服务器,每隔一段时间换一个代理,
当IP被禁,依然可以换其他IP 继续爬取。

from urllib import request# 没有使用代理的
'''
url='http://httpbin.org/ip'
resp=request.urlopen(url)
print(resp.read())
'''
# b'{\n  "origin": "111.79.225.123"\n}\n'# 使用代理
url='http://httpbin.org/ip'
#1.使用ProxyHandler传入代理构建一个handler
handler=request.ProxyHandler({"http":"112.250.107.37:53281"})
# 2.使用上述hander构建一个opener
opener=request.build_opener(handler)
# 3.使用opener发送一个请求
resp=opener.open(url)
print(resp.read())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17679.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

线性代数——行列式

文章目录二阶行列式与三阶行列式全排列和对换n阶行列式的定义行列式的性质行列式按行&#xff08;列&#xff09;展开二阶行列式与三阶行列式 全排列和对换 n阶行列式的定义 行列式的性质 行列式按行&#xff08;列&#xff09;展开

线性代数--矩阵

线性代数--矩阵线性代数--矩阵线性方程组和矩阵矩阵的运算可逆矩阵克拉默法则线性代数–矩阵 线性方程组和矩阵 矩阵的运算 可逆矩阵 克拉默法则

线性代数--矩阵、向量

线性代数线性代数矩阵及其运算矩阵分块法矩阵的初等变换于线性方程组矩阵的初等变换矩阵的秩线性方程组的解向量组的线性相关性向量组及其线性组合向量组的线性相关性线性代数 矩阵及其运算 矩阵分块法 矩阵的初等变换于线性方程组 矩阵的初等变换 矩阵的秩 线性方程组的解 …

线性代数向量笔记

文章目录线性代数向量向量的基本概念向量组的线性相关性与线性表示向量组的秩线性代数 向量 向量的基本概念 向量组的线性相关性与线性表示 向量组的秩

使用OpenCV在图像和视频流中执行基于深度学习的超级分辨率

这篇博客将介绍如何使用OpenCV在图像和视频流中执行基于深度学习的超级分辨率。 深度神经网络中有与超分辨率相关的 预训练好的模型与OpenCV兼容超分辨率是指放大图像后,图像的质量基本没有损失,依然清晰。 OpenCV的超分辨率功能实际上“隐藏”在一个名为dnn_superres的子模…

微软SCRUM 1.0流程模板在中文版TFS2010上无法创建项目的解决办法(续)

原文&#xff1a; http://www.almnetworks.net/zh-CN/post/2010/08/04/Microsoft-Visual-Studio-Scrum-10-Template-on-Chinese-Version-of-TFS.aspx 经过我的进一步测试&#xff0c;发现以上步骤不能解决这个问题&#xff0c;但是我找到了一个可以暂时保证我们使用SCRUM模板的…

概率论与数理统计

文章目录概率论与数理统计概率论的基本概念概率论与数理统计 概率论的基本概念

2021-08-08概率论与数理统计-第二章

文章目录概率论与数理统计-第二章概率论与数理统计-第二章