Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

Go语言进阶学习
Go语言进阶学习ke hadapan
2023-07-25 14:08:04726semak imbas

1. Memanipulasi URL

urllib menyediakan satu siri fungsi untuk memanipulasi URL. Kelaskan kandungan yang berkaitan.


2. Dapatkan()

urllib'srequestModul request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:

例如,对豆瓣的URLhttps://api.growingio.com/v2/22c937bbd8ebd703f2d8e9445f7dfd03/web/pv?stm=1593747087078 boleh menangkap kandungan URL dengan mudah, iaitu menghantar permintaan GET ke halaman yang ditentukan, dan kemudian mengembalikan respons HTTP: Sebagai contoh, URL Douban

https://api.growingio.com/v2/22c937bbd8ebd703f2d8e9445f7dfd03/web/pv?stm=1593747087078🎜🎜rangkak dan kembalikan jawapan: 🎜🎜

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

from urllib import request


with request.urlopen('https://api.growingio.com/v2/22c937bbd8ebd703f2d8e9445f7dfd03/web/pv?stm=1593747087078') as f:
    data = f.read()
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', data.decode('utf-8'))

Anda boleh melihat pengepala dan data JSON bagi respons HTTP:

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

Jika anda ingin menggunakan GET jika anda ingin mensimulasikan permintaan pelayarRequest对象,通过往Request对象添加HTTP头,就可以把请求伪装成浏览器。例如,模拟iPhone 6去请求豆瓣首页:

from urllib import request


req = request.Request('http://www.douban.com/')
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
with request.urlopen(req) as f:
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))

这样豆瓣会返回适合iPhone的移动版网页:

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)


三、Post()

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

如果要以POST发送一个请求,只需要把参数data code style="box -sizing: border-box;font-family: var(--monospace);vertical-align: initial;border-width: 1px;border-style: solid;border-color: rgb(231, 234 , 237);background -color: rgb(243, 244, 244);border-radius: 3px;padding-right: 2px;padding-left: 2px;font-size: 0.9em;">Minta objek, dengan pergi ke
Permintaan Dengan menambahkan pengepala HTTP pada kod>

🎜 objek, anda boleh menyamar permintaan itu sebagai penyemak imbas. Sebagai contoh, simulasi iPhone 6 untuk meminta halaman utama Douban: 🎜🎜🎜🎜
from urllib import request, parse


print('Login to weibo.cn...')
#电子邮件
email = input('Email: ')
#密码
passwd = input('Password: ')
#相关的参数
login_data = parse.urlencode([
    ('username', email),
    ('password', passwd),
    ('entry', 'mweibo'),
    ('client_id', ''),
    ('savestate', '1'),
    ('ec', ''),
    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')
])
#网址请求
req = request.Request('https://passport.weibo.cn/sso/login')
req.add_header('Origin', 'https://passport.weibo.cn')
#构造User-Agent
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')


with request.urlopen(req, data=login_data.encode('utf-8')) as f:
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))
🎜

🎜Dengan cara ini, Douban akan mengembalikan versi mudah alih halaman web yang sesuai untuk iPhone: 🎜🎜🎜🎜Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)🎜🎜🎜🎜

🎜Tiga, Post()🎜

🎜Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)🎜

🎜Jika anda ingin menghantar permintaan dengan POST, anda hanya perlu meletakkan parameter 🎜🎜data🎜🎜 dihantar dalam bait. 🎜🎜🎜

模拟一个微博登录,先读取登录的邮箱和口令,然后按照weibo.cn的登录页的格式以username=xxx&password=xxx的编码传入:

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

from urllib import request, parse


print('Login to weibo.cn...')
#电子邮件
email = input('Email: ')
#密码
passwd = input('Password: ')
#相关的参数
login_data = parse.urlencode([
    ('username', email),
    ('password', passwd),
    ('entry', 'mweibo'),
    ('client_id', ''),
    ('savestate', '1'),
    ('ec', ''),
    ('pagerefer', 'https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2F')
])
#网址请求
req = request.Request('https://passport.weibo.cn/sso/login')
req.add_header('Origin', 'https://passport.weibo.cn')
#构造User-Agent
req.add_header('User-Agent', 'Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25')
req.add_header('Referer', 'https://passport.weibo.cn/signin/login?entry=mweibo&res=wel&wm=3349&r=http%3A%2F%2Fm.weibo.cn%2F')


with request.urlopen(req, data=login_data.encode('utf-8')) as f:
    print('Status:', f.status, f.reason)
    for k, v in f.getheaders():
        print('%s: %s' % (k, v))
    print('Data:', f.read().decode('utf-8'))

如果登录成功,获得的响应如下:

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

如果登录失败,获得的响应如下:

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)


四、Handler

如果还需要更复杂的控制,比如通过一个Proxy去访问网站,需要利用ProxyHandler来处理,示例代码如下:

import urllib.request


# 构建了两个代理Handler,一个有代理IP,一个没有代理IP


httpproxy_handler = urllib.request.ProxyHandler({"https": "27.191.234.69:9999"})


nullproxy_handler = urllib.request.ProxyHandler({})


# 定义一个代理开关


proxySwitch = True 


# 通过 urllib.request.build_opener()方法使用这些代理Handler对象,创建自定义opener对象


# 根据代理开关是否打开,使用不同的代理模式


if proxySwitch:


    opener = urllib.request.build_opener(httpproxy_handler)
else:
    opener = urllib.request.build_opener(nullproxy_handler)




request = urllib.request.Request("http://www.baidu.com/") 


# 1. 如果这么写,只有使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。


response = opener.open(request)


# 2. 如果这么写,就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。


# urllib.request.install_opener(opener)


# response = urllib.request.urlopen(request)




# 获取服务器响应内容


html = response.read().decode("utf-8")
  
# 打印结果


print(html)

如果代理成功返回网址的信息。

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)

Jika URL salah atau alamat proksi salah, kembali ke antara muka di bawah.

Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian)


5. Ringkasan

Menggunakan bahasa Python boleh membantu semua orang belajar dengan lebih baik. Fungsi yang disediakan oleh urllib adalah untuk menggunakan program untuk melaksanakan pelbagai permintaan HTTP. Jika anda ingin mensimulasikan penyemak imbas untuk melengkapkan fungsi tertentu, anda perlu menyamar permintaan itu sebagai penyemak imbas. Kaedah penyamaran adalah dengan terlebih dahulu memantau permintaan yang dihantar oleh penyemak imbas, dan kemudian menyamarkannya berdasarkan pengepala permintaan pelayar Pengepala Ejen Pengguna digunakan untuk mengenal pasti penyemak imbas.

Atas ialah kandungan terperinci Satu artikel akan membimbing anda melalui perpustakaan urllib dalam Python (URL pengendalian). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:Go语言进阶学习. Jika ada pelanggaran, sila hubungi admin@php.cn Padam