python爬虫urllib库

前言

        urllib库是python自带的标准库,不用安装,可直接使用。它用于处理url,并对网页的内容进行抓取处理。

urllib 包含以下几个模块:  

urllib.request :打开和读取 URL。用于发送请求和读取数据

urllib.error :包含 urllib.request 抛出的异常。

urllib.parse :解析和构造 URL。

urllib.robotparser :提供 RobotFileParse 类,解析 robots.txt 文件。


一、urllib.request

      1、发送请求

        urllib.request.urlopen 是 Python urllib.request 模块中的一个函数,用于打开一个 URL 并返回一个 HTTPResponse 对象。

urllib.request.urlopen() 的语法:

urllib.request.urlopen(url, date=None, [timeout, ]*, cafile=None, capath=None, 
cadefault=False, context=None)
  • url:要请求的URL。
  • data:可选,发送的数据(如POST请求的数据)。默认值为None,若data为None,代表请求方式为get,发送get请求;若data不为None,则代表请求方式为post,发送post请求。
  • timeout:可选,请求超时时间(秒),如果未指定,则使用全局默认超时设置。
  • cafile:可选,CA证书文件路径。
  • capath:可选,CA证书目录路径。
  • cadefault:可选,是否使用默认CA证书。
  • context:可选,SSL上下文对象。

例如:

import urllib.request

# 发送一个GET请求到 https://mp.csdn.net,并设置超时时间为10秒。
response = urllib.request.urlopen('https://mp.csdn.net', timeout=10)

2、处理响应内容

        urllib.request.urlopen  的返回值是一个 对象 http.client.HTTPResponse ,常用以下方法读取响应内容:

  • read():读取整个响应内容。
  • readline():读取一行内容。
  • readlines():读取所有行并返回一个列表 

读取响应内容,例如:

import urllib.request

response = urllib.request.urlopen('https://mp.csdn.net')
context = response.read()    //读取响应内容
print(context)

3、设置请求头 

        在发送请求时,可以设置 HTTP 请求头,以模拟浏览器行为或传递额外的信息。通过urllib.request 模块中的 Request 类来设置请求头。

urllib.request.Request() 的语法:

urllib.request.Request(url, data=None, heads={}, method=None)
  • url:要发送请求的 URL。
  • data:可选,发送的数据(如POST请求的数据)。默认值为None,若data为None,代表请求             方式为get,发送get请求;若data不为None,则代表请求方式为post,发送post请求。
  • headers:可选,设置请求中的请求头信息(字典类型)。
  • method:设置请求方式)。

设置请求头,例如:

import urllib.request

url = 'https://mp.csdn.net'

# 自定义请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) '
                  'AppleWebKit/534.16 (KHTML, like Gecko) '
                  'Chrome/10.0.648.133 Safari/534.16'
}

# 设置请求头
request = urllib.request.Request(url, headers=headers)

response = urllib.request.urlopen(request)
context = response.read()

print(context)

4、代理IP 

        在使用 urllib 进行网络请求时,可设置代理IP来访问网站,以隐藏用户的真实 IP 地址。通过 urllib.request.ProxyHandler() 方法动态设置代理IP池。

创建代理IP池,使用代理IP访问网站,例如:

import urllib.request
import random

# 创建代理IP池
proxy_pool = [
    {'http': '8.220.204.215:8080', 'https': '8.220.204.215:8080'},
    {'http': '154.203.132.49:8080', 'https': '154.203.132.49:8080'},
    {'http': '180.103.181.10:80', 'https': '180.103.181.10:80'},
    {'http': '101.200.75.55:80', 'https': '101.200.75.55:80'}

]

# 从代理IP池中随机选择一个代理IP
def get_random_proxy():
    return random.choice(proxy_pool)


url = 'https://mp.csdn.net'

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) '
                  'AppleWebKit/534.16 (KHTML, like Gecko) '
                  'Chrome/10.0.648.133 Safari/534.16'
}

# 代理IP
proxy = get_random_proxy()

# 设置代理IP
proxy_handler = urllib.request.ProxyHandler(proxy)
opener = urllib.request.build_opener(proxy_handler)

request = urllib.request.Request(url, headers=headers)

response = opener.open(request).decode('utf-8')
context = response.read()
print(context)

注:由于使用代理IP,代理IP可能不可用或已失效,连接IP的时候出现超时而报错;也可能目标网站检测到代理并拒绝访问,且频繁使用有限的代理IP可能导致IP被封。


二、url.error


三、url.parse


四、url.robotparser

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值