urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求。其常被用到的子模块在Python3中的为urllib.request和urllib.parse,在Python2中是urllib和urllib2。

一、使用流程:

  • 指定url
  • 基于urllib的request子模块发起请求
  • 获取响应中的数据值
  • 持久化存储

二、urlopen函数原型:

urllib.request.urlopen(url, data=None, timeout=<object object at 0x10af327d0>, *, cafile=None, capath=None, cadefault=False, context=None)在日常开发中,我们能用的只有url和data这两个参数。

  • url参数:指定向哪个url发起请求
  • url的特性:url必须为ASCII编码的数据值。所以我们在爬虫代码中编写url时,如果url中存在非ASCII编码的数据值,则必须对其进行ASCII编码后,该url方可被使用。
    1. get: word = urllib.parse.quote("人民币")
    2. post: data = { 'kw':'西瓜'} data = urllib.parse.urlencode(data) data = data.encode() urlencode(返回值类型为str)
  • data参数:可以将post请求中携带的参数封装成字典的形式传递给该参数
  • urlopen函数返回的响应对象,相关函数调用介绍:
    1. response.headers():获取响应头信息
    2. response.getcode():获取响应状态码
    3. response.geturl():获取请求的url
    4. response.read():获取响应中的数据值(字节类型)

三、其他

  • 反爬机制:网站检查请求的UA,如果发现UA是爬虫程序,则拒绝提供网站数据。
  • User-Agent(UA):请求载体的身份标识.
  • 反反爬机制:伪装爬虫程序请求的UA
  • 通过自定义请求对象,用于伪装爬虫程序请求的身份。
请求库之urllib,requests及工具selenium
"""
基础使用
"""
# 需求:爬取搜狗首页的页面数据
import urllib.request
#1.指定url
url = 'https://www.sogou.com/'

#2.发起请求:urlopen可以根据指定的url发起请求,切返回一个响应对象
response = urllib.request.urlopen(url=url)

#3.获取页面数据:read函数返回的就是响应对象中存储的页面数据(byte)
page_text = response.read()

#4.持久化存储
with open('./sougou.html','wb') as fp:
    fp.write(page_text)
    print('写入数据成功')


"""
get:
"""
# 需求:爬取指定词条所对应的页面数据
import urllib.request
import urllib.parse
#指定url
url = 'https://www.sogou.com/web?query='
#url特性:url不可以存在非ASCII编码的字符数据
word = urllib.parse.quote("人民币")
url += word #有效的url
#发请求
response = urllib.request.urlopen(url=url)

#获取页面数据
page_text = response.read()

with open('renminbi.html','wb') as fp:
    fp.write(page_text)


"""
UA伪装
"""
import urllib.request
url = 'https://www.baidu.com/'
# UA伪装
# 1.子制定一个请求对象
headers = {
    # 存储任意的请求头信息
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.67 Safari/537.36'
}
# 该请求对象的UA进行了成功的伪装
request = urllib.request.Request(url=url, headers=headers)
# 2.针对自制定的请求对象发起请求
response = urllib.request.urlopen(request)
print(response.read())


"""
post
"""
import urllib.request
import urllib.parse
#1.指定url
url = 'https://fanyi.baidu.com/sug'
#post请求携带的参数进行处理  流程:
#1.将post请求参数封装到字典
data = {
    'kw':'西瓜'
}
#2.使用parse模块中的urlencode(返回值类型为str)进行编码处理
data = urllib.parse.urlencode(data)
#3.将步骤2的编码结果转换成byte类型
data = data.encode()

#2.发起post请求:urlopen函数的data参数表示的就是经过处理之后的post请求携带的参数
response = urllib.request.urlopen(url=url,data=data)

response.read()
urllib使用

相关文章:

  • 2022-12-23
  • 2021-07-02
  • 2021-07-21
  • 2022-01-01
  • 2022-01-09
  • 2021-11-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-09-14
  • 2022-12-23
  • 2021-12-25
  • 2022-02-26
  • 2022-01-06
  • 2021-12-05
相关资源
相似解决方案