Python爬虫库urllib,requests基本方法

urllib库的基本使用

import ssl
import urllib.request
import urllib.parse


url = 'https://www.baidu.com/'
# 发送简单的get请求    百度
resp1 = urllib.request.urlopen(url)

# 发送简单的post请求 百度翻译
urlSug = 'https://fanyi.baidu.com/sug'
keyDict = {
    "kw": "答案"
}
keyEncode = urllib.parse.urlencode(keyDict).encode()
resp2 = urllib.request.urlopen(urlSug, data=keyEncode)

# 附加ssl信息
resp3 = urllib.request.urlopen(url, context=ssl.SSLContext(ssl.PROTOCOL_SSLv23))

# 请求附带Headers
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'accept-language': 'zh-CN,zh;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2843.400',
        }
req = urllib.request.Request(url, headers=headers)
resp4 = urllib.request.urlopen(url)

# 使用代理
http_proxy_handler = urllib.request.ProxyHandler({"http" : "61.135.217.7:80"})
opener = urllib.request.build_opener(http_proxy_handler)
resp5 = opener.open(url)

# 设置超时未响应 报错
resp6 = urllib.request.urlopen(url, timeout=1)

from http.client import HTTPResponse
# 返回状态码
print(resp4.code, resp4.status)
print(resp4.getcode())
# 返回网址
print(resp4.url)
print(resp4.geturl())

# 服务器端返回的请求头
# <class 'http.client.HTTPMessage'>
print(resp4.headers)
print(resp4.info())
# 列表形式
print(resp4.getheaders())       # [('Accept-Ranges', 'bytes'), ('Cache-Control', 'no-cache')。。。]
# 单个值
print(resp4.getheader('Content-Type'))  # text/html

# 读
content = resp4.read()    # 读取获取的响应网页信息 二进制形式一般要解析需要解码
HTMLText = content.decode() # 解码

requests库基本使用

requests 非官方库,但使用简单。 pip install request

Requests库的理念:让http服务人类
使用requests库能非常方便地模拟各种请求。
常见请求:

  • get 请求指定的页面信息,并返回实体主体。
  • post 提交表单等信息并 返回实体主体
  • head 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
  • put 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
  • delete 请求服务器删除指定的资源。
  • options 允许客户端查看服务器的性能
import requests


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

# 发送简单get请求
resp1 = requests.get(url)
payload = {'key1': 'values', 'key2': "value2"}
# 附带参数
resp2 = requests.get(url, params=payload)

# 发送head请求,用于获取报头
resp3 = requests.head(url)

# 发送简单的post请求 百度翻译
urlSug = 'https://fanyi.baidu.com/sug'
keyDict = {
    "kw": "答案"
}
resp4 = requests.post(urlSug, data=keyDict)

# 请求附带headers
headers = {
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'accept-language': 'zh-CN,zh;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2843.400',
}
resp5 = requests.get(url, headers=headers)

# 使用代理
proxies = {'https': 'https://117.88.5.230:3000', 'http': 'http://122.231.160.150:9999'}
# resp6 = requests.get(url, proxies=proxies)    # 代理不一定还有用。

# 设置超时 即超出规定时间未获得响应就报错
resp7 = requests.get(url, timeout=1)

# 响应结果的处理
from requests.models import Response

# 状态码
print(resp1.status_code)

# 最终响应的网址
print(resp1.url)

# 返回的请求头
print(resp1.headers)

# 返回请求头的某个值
print(resp1.headers.get('Content-Type'))

# 响应的cookies 信息
print(resp1.cookies)

# 返回响应信息的编码/解码 格式。 可以进行赋值
# 如果赋值,在对相应的二进制数据进行解码时,会按照设置的编码格式进行解码。
# 否则会自动挑选出最合适的解码格式作为解码依据
print(resp1.encoding)
resp1.encoding = 'utf-8'
print(resp1.encoding)

# 响应的信息 二进制格式
print(resp1.content)

# 响应的信息, 字符串格式。 二进制格式信息按照规定或者自动寻找到的解码方式解码后的信息
print(resp1.text)

# 如果响应信息时json格式。可直接解析成对象
print(resp4.json(), type(resp4.json()))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值