Python的Urllib.request模板

Urllib库

urllib(库).request(请求)默认只支持HTTP/HTTPS的GET和POST方法

urllib 包

urllib.request

urlopen函数

加入User-Agent

随机导入User-Agent

Get方式

POST方式:(带表单信息,要封装数据)

获取请求头部信息

状态码(200为正常)


Urllib库

urllib(库).request(请求)默认只支持HTTP/HTTPS的GETPOST方法

Python urllib 库用于操作网页 URL,并对网页的内容进行抓取处理。

urllib 包

包含以下几个模块:

        urllib.request - 打开和读取 URL。

        urllib.error (错误)- 包含 urllib.request 抛出的异常。

        urllib.parse(解析) - 解析 URL。

        urllib.robotparser(机器人解析) - 解析 robots.txt 文件。   

urllib.request

urlopen函数

访问百度的网站,爬取网站的信息。打印的信息就是网页的内容,html文件的内容。
 通过开发者工具:ctrl+F12查看百度网站的源码,发现是一样的,这样就获取到了网页的信息了。

urllib.request 定义了一些打开 URL 的函数和类,包含授权验证、重定向、浏览器 cookies等。

urllib.request 可以模拟浏览器的一个请求发起过程。

我们可以使用 urllib.request 的 urlopen 方法来打开一个 URL,语法格式如下:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)
  • url:url 地址。
  • data:发送到服务器的其他数据对象,默认为 None。
  • timeout:设置访问超时时间。
  • cafile 和 capath:cafile 为 CA 证书, capath 为 CA 证书的路径,使用 HTTPS 需要用到。
  • cadefault:已经被弃用。
  • context:ssl.SSLContext类型,用来指定 SSL 设置。     

加入User-Agent

url="http://douban.com"

headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42"

}
data=bytes(urllib.parse.urlencode({'name':'eric'}),encoding="utf-8")
req=urllib.request.Request(url=url,data=data,headers=headers,method="POST")
response=urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

随机导入User-Agent

from urllib import request
import random
ua_list = [
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36",
    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36",
    "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
    "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"
    "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2225.0 Safari/537.36"
]
header = {"User-Agent": random.choice(ua_list)}
requests = request.Request("http://www.baidu.com", headers=header)
response = request.urlopen(requests)
html = response.read().decode('utf-8')
print(html)

data    data必须是bytes(字节流)类型,如果是字典,可以用urllib.parse模块里的urlencode()编码
headers    headers是一个字典类型,是请求头。可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例的add_header()方法添加。可以通过请求头伪装浏览器,默认User-Agent是Python-urllib。要伪装IE浏览器,可以设置

"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42"


origin_req_host    指定请求方的host名称或者ip地址
unverifiable    设置网页是否需要验证,默认是False,这个参数一般也不用设置。
method    method是一个字符串,用来指定请求使用的方法,比如GET,POST和PUT等。

Get方式

我们在对网页进行抓取时,经常需要判断网页是否可以正常访问,这里我们就可以使用 getcode() 函数获取网页状态码,返回 200 说明网页正常,返回 404 说明网页不存在:

import urllib.request
#获取一个get请求

response = urllib.request.urlopen("http://baidu.com/get")
print(response.read().decode("utf-8"))

POST方式:(带表单信息,要封装数据)

上面我们说了Request请求对象的里有data参数,它就是用在POST里的,我们要传送的数据就是这个参数data,data是一个字典,里面要匹配键值对。

import urllib.request
获取一个post请求
import urllib.parse #parse 解析器 解析bytes中的中文或者英文,按照一定格式“utf-8”,统一变成二进制
data=bytes(urllib.parse.urlencode({'HELLO':"WORD"}),encoding="utf-8")#字典方式
response=urllib.request.urlopen("http://httpbin.org/post",data=data)
print(response.read().decode("utf-8"))

获取请求头部信息

response = urllib.request.urlopen("https://baidu.com")

print(response.getheaders())


状态码(200为正常)

418 我是一个茶壶   对方已经发现你是一个爬虫

response = urllib.request.urlopen("https://douban.com/get")
print(response.status)

404 找不到

response = urllib.request.urlopen("https://baidu.com/get")
print(response.status)

200为正常

练习 捕获豆瓣

url = "http://douban.com"
import urllib.parse
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42"
}
data=bytes(urllib.parse.urlencode({'name':'eric'}),encoding="utf-8")
req=urllib.request.Request(url=url,data=data,headers=headers)
response=urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值