网络请求之urllib.request的使用(Get方式)

urllib.request用于打开和读取url,模拟浏览器发送一个http请求,并获取响应结果。

urllib.request.urlopen的语法格式:

urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)

参数说明:
  • url
    url参数是str类型的地址,也就是访问的url,例如:https://image.baidu.com
  • data
    默认值为None,urllib判断参数data是否为None从而区分请求方式。或参数data为None,则代表请求方式为Get,反之则为Post。参数data以字典形式存储数据,并将参数data由字典类型转换成字节类型完成Post请求。
返回对象

urlopen函数,返回的结果,是一个http.client.HTTPResponse对象

Get方式爬取数据

import urllib.request

response=urllib.request.urlopen("https://image.baidu.com")
result=response.read()
print(result)

查看打印的部分内容(因为百度的页面数据太多了)

b'<!DOCTYPE html>\n<html lang="">\n  <head>\n    <meta charset=utf-8>\n    <meta http-equiv=X-UA-Compatible content="IE=edge">\n    <meta name=viewport content="width=device-width,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">\n    <title>\xe5\x9b\xbe\xe6\x90\x9c\xe9\xa6\x96\xe9\xa1\xb5</title>\n   

发现titile居然是一堆十六进制的乱码,只说明我们代码里还没有处理字符集,这时候就需要去浏览器中打开网址:https://image.baidu.com,查看源代码的字符集了,发现字符集是“utf-8”
修改代码重新爬取试试:

import urllib.request

response=urllib.request.urlopen("https://image.baidu.com")
result=response.read().decode("utf-8") #decode就是处理编码格式的
print(result)

输出的内容这才对:

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset=utf-8>
    <meta http-equiv=X-UA-Compatible content="IE=edge">
    <meta name=viewport content="width=device-width,viewport-fit=cover,initial-scale=1,maximum-scale=1,user-scalable=0">
    <title>图搜首页</title>
    ...
    </head>
</html> 

所以呢,总结起来,爬虫的时候,一定要分析目标页面的编码,避免返工改一些无聊的bug,当然程序员防御性编程这无话可说

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None) 这个方法用于打开一个URL地址,可以是HTTP、HTTPS或FTP等协议。它返回一个类文件对象,我们可以利用该对象读取远程数据。 参数说明: - url:必传参数,要打开的URL地址。 - data:可选参数,表示要传递的数据。如果传递了这个参数,那么请求方式就会自动变成POST,否则就是GET。 - timeout:可选参数,表示超时时间,单位为秒。 - cafile:可选参数,表示CA证书文件的路径。 - capath:可选参数,表示CA证书目录的路径。 - cadefault:可选参数,表示是否使用默认的CA证书文件和目录。 - context:可选参数,表示SSL上下文。 使用示例: ```python import urllib.request # 打开一个URL地址 response = urllib.request.urlopen('http://www.example.com/') # 读取网页内容 html = response.read().decode('utf-8') # 打印网页内容 print(html) ``` 如果需要传递数据,可以在`urllib.request.urlopen()`中传递`data`参数,如下所示: ```python import urllib.parse import urllib.request # 要发送的数据 data = {'name': '张三', 'age': 18} # 将数据进行编码 data = urllib.parse.urlencode(data).encode('utf-8') # 打开一个URL地址,传递数据 response = urllib.request.urlopen('http://www.example.com/', data) # 读取网页内容 html = response.read().decode('utf-8') # 打印网页内容 print(html) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值