Python-爬虫之urllib

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Python-爬虫之urllib脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、urllib返回的响应对象

# 1个对象类型
# ------------------------------------
print(type(response)) # <class 'http.client.HTTPResponse'>


# 6个方法
# ------------------------------------
# 1. read()
# 功能:一个字节一个字节的读
# 返回:二进制字节类型
content = response.read()  # 读取全部
content = response.read(6) # 读 n 个字节

# 2. readlines()
# 功能:一行一行的读,直到读取完
# 返回:返回列表,每个元素是每行数据的二进制字节类型
content = response.readlines().

# 3. readline()
# 功能:读取第一行,只读取一行
# 返回:二进制字节类型
content = response.readline()

# 4. getcode()
# 功能:返回状态码 【如果是 200 则说明正确,如果是 404、、 等,就是错误】
# 返回:整数类型
print(response.getcode())

# 5. geturl()
# 功能:获取 url 地址
# 返回:字符串
print(type(response.geturl()))

二、通用的get请求

import urllib.parse
import urllib.request
import urllib.error


try:
    # 1. 提供基础url
    baseUrl = 'https://www.bilibili.com'

    # 2. 提供url的参数
    data = {
		# 没有的话,就不写
    }

    # 3. 将参数转变为Unicode编码,且用'&'连接成字符串
    data = urllib.parse.urlencode(data)

    # 4. 拼接为完整的 url
    url = baseUrl + data

    # 5. 提供请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    }

    # 6. 定制请求对象
    request = urllib.request.Request(url=url, headers=headers)

    # 7. 发送请求
    response = urllib.request.urlopen(request)

    # 8. 读取相应数据
    content = response.read()

    # 9. 解码数据
    content = content.decode('utf-8')

    # 10. 处理数据
    print(content)
    with open('bi.html', 'w', encoding='utf-8') as fp:
        fp.write(content)

except urllib.error.HTTPError:
    print('HTTPError:错误!!!')
except urllib.error.URLError:
    print('URLError:错误!!!')

三、通用的post请求

import json
import urllib.parse
import urllib.request
import urllib.error

try:
    # 1. 提供基础url
    baseUrl = 'https://fanyi.baidu.com/sug'

    # 2. 提供url的参数
    data = {
        'kw': 'key',
    }

    # 3. 将参数转变为Unicode编码,并且用'&'连接成字符串
    data = urllib.parse.urlencode(data)

    # 4. 将参数进行编码【post比get多出的一步】
    data = data.encode('utf-8')

    # 5. 提供请求头
    headers = {
        'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    }

    # 6. 定制请求对象
    request = urllib.request.Request(url=baseUrl, data=data, headers=headers)

    # 7. 发送请求
    response = urllib.request.urlopen(request)

    # 8. 读取相应数据
    content = response.read()

    # 9. 解码数据
    content = content.decode('utf-8')

    # 10. 处理数据
    # 编码:保存到文件
    with open('fanyi.json', 'w', encoding='utf-8') as fp:
        # json.dump(content, fp) # 如果用这个方法,可能会报错
        fp.write(content)

    # 解码:从文件读出
    with open('fanyi.json', 'r', encoding='utf-8') as fp:
        data = json.load(fp)
        print(data)

except urllib.error.HTTPError:
    print('HTTPError:错误!!!')
except urllib.error.URLError:
    print('URLError:错误!!!')

四、通用的get请求使用代理池

import urllib.parse
import urllib.request
import urllib.error
from random import choice

try:
    # 1. 提供基础url
    baseUrl = 'https://www.bilibili.com'

    # 2. 提供url的参数
    data = {
        # 没有的话,就不写
    }

    # 3. 将参数转变为Unicode编码,且用'&'连接成字符串
    data = urllib.parse.urlencode(data)

    # 4. 拼接为完整的 url
    url = baseUrl + data

    # 5. 提供请求头
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    }

    # 6. 定制请求对象
    request = urllib.request.Request(url=url, headers=headers)

    # 7. 提供一个 代理池
    proxise_pool = [
        {'http': '47.242.66.236:4818'},
        {'http': '47.242.190.60:11573'},
    ]

    # 8. 随机获取一个代理
    proxise = choice(proxise_pool)

    # 9. 获取 handler 对象
    handler = urllib.request.ProxyHandler(proxies=proxise)

    # 10. 获取 opener 对象
    opener = urllib.request.build_opener(handler)

    # 11. 调用 open 方法,模拟浏览器向服务器发送请求,并获得响应对象
    response = opener.open(request)

    # 12. 读取相应数据
    content = response.read()

    # 13. 解码数据
    content = content.decode('utf-8')

    # 14. 处理数据
    print(content)

except urllib.error.HTTPError:
    print('HTTPError:错误!!!')
except urllib.error.URLError:
    print('URLError:错误!!!')

五、通用的post请求使用代理池

import json
import urllib.parse
import urllib.request
import urllib.error
from random import choice

try:
    # 1. 提供基础url
    baseUrl = 'https://fanyi.baidu.com/sug'

    # 2. 提供url的参数
    data = {
        'kw': 'key',
    }

    # 3. 将参数转变为Unicode编码,并且用'&'连接成字符串
    data = urllib.parse.urlencode(data)

    # 4. 将参数进行编码【post比get多出的一步】
    data = data.encode('utf-8')

    # 5. 提供请求头
    headers = {
        'Referer': 'https://fanyi.baidu.com/translate?aldtype=16047&query=&keyfrom=baidu&smartresult=dict&lang=auto2zh',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36',
    }

    # 6. 定制请求对象
    request = urllib.request.Request(url=baseUrl, data=data, headers=headers)

    # 7. 提供一个 代理池
    proxise_pool = [
        {'http': '47.242.66.236:4818'},
        {'http': '47.242.190.60:11573'},
    ]

    # 8. 随机获取一个代理
    proxise = choice(proxise_pool)

    # 9. 获取 handler 对象
    handler = urllib.request.ProxyHandler(proxies=proxise)

    # 10. 获取 opener 对象
    opener = urllib.request.build_opener(handler)

    # 11. 调用 open 方法,模拟浏览器向服务器发送请求,并获得响应对象
    response = opener.open(request)

    # 12. 读取相应数据
    content = response.read()

    # 13. 解码数据
    content = content.decode('utf-8')

    # 14. 处理数据
    # 编码:保存到文件
    with open('fanyi.json', 'w', encoding='utf-8') as fp:
        # json.dump(content, fp) # 如果用这个方法,可能会报错
        fp.write(content)

    # 解码:从文件读出
    with open('fanyi.json', 'r', encoding='utf-8') as fp:
        data = json.load(fp)
        print(data)

except urllib.error.HTTPError:
    print('HTTPError:错误!!!')
except urllib.error.URLError:
    print('URLError:错误!!!')

脚本宝典总结

以上是脚本宝典为你收集整理的Python-爬虫之urllib全部内容,希望文章能够帮你解决Python-爬虫之urllib所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: