【爬虫】Urllib让我们的 python 假装是浏览器

news/2024/7/19 10:18:34 标签: 爬虫, python, 开发语言

在 Python 这个内置的 Urllib 库中,有这么 4 个模块:

  1. request,request模块是我们用的比较多的,就是用它来发起请求,所以我们重点说说这个模块。
  2. error,error模块呢,就是当我们在使用 request 模块遇到错了,就可以用它来进行异常处理。
  3. parse,parse模块就是用来解析我们的 URL 地址的,比如解析域名地址啦,URL指定的目录等。
  4. robotparser,这个用的就比较少了,它就是用来解析网站的 robot.txt

了解了 urllib 之后,我们就用 python 代码来模拟请求吧!

urllib.request

首先我们导入 urllib 的请求模块:

python">import urllib.request

response = urllib.request.urlopen('http://www.baidu.com')
print(response.read().decode('utf-8'))

我们通过 request 模块的 urlopen 方法,直接用 Get 请求方式请求百度了,那么返回的内容就是和浏览器一样的。
request 的 urlopen 方法,可以传入的参数主要有 3 个
urllib.request.urlopen(url, data=None, [timeout, ]*)
第一个 url 就是我们请求的链接,比如我们刚刚就请求百度。

第二个参数 data,就是专门给我们 post 请求携带参数的,比如我们在登录的时候,可以把用户名密码封装成 data 传过去,在这里的 data 的值我们可以用 byte 的类型传递。

第三个参数 timeout 就是设置请求超时时间,如果等好久服务器都没有给我们返回数据,我们就不鸟他了!这就是 request 的 urlopen 主要用法。

如果我们要欺骗服务器说我们是浏览器或者手机请求的呢?这个时候我们需要添加请求头信息,也就是我们上次说的 request header。那么,这个时候,就该让 request 模块中的 Request 方法出场了,这个 Request 方法的参数多一些:
urllib.request.Request(url, data=None, headers={}, method=None)
我们除了定义 url 和 data 之外,我们还可以定义请求头信息,urlopen 默认是 Get 请求当,我们传入参数它就为 Post 请求了,而 Request 可以让我们自己定义请求的方式,这样我们就可以使用 Request 来封装我们的请求信息。
通过设定headers参数可以冒充某个设备浏览器:

python">headers = {
    #假装自己是浏览器
    'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}

记得请求参数要转unicode码:

python">from urllib import request,parse
dict = {
    'return_url':'https://zhihu.com/',
    'user_name':'xiaoshuaib@gmail.com',
    'password':'123456789',
    '_post_type':'ajax',
}
data = bytes(parse.urlencode(dict),'utf-8')

然后我们就可以封装 request 了:

python">req = request.Request(url,data=data,headers=headers,method='POST')

最后发送请求:

python">response = request.urlopen(req)
print(response.read().decode('utf-8'))

http://www.niftyadmin.cn/n/4941377.html

相关文章

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法

idea中Maven报错Unable to import maven project: See logs for details问题的解决方法。 在查看maven的环境配置和idea的maven配置后,发现是idea 2020版本和maven 3.9.3版本的兼容性问题。在更改为Idea自带的maven 3.6.1版本后问题解决,能成功下载jar包…

linux 系统中vi 编辑器和库的制作和使用

目录 1 vim 1.1 vim简单介绍 1.2 vim的三种模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切换到文本输入模式 1.3.3 末行模式下的操作 2 gcc编译器 2.1 gcc的工作流程 2.2 gcc常用参数 3 静态库和共享(动态)库 3.1库的介绍 3.2静态…

基于java计算机类考研交流平台设计与实现

摘要 高校的大学生考研是继高校的高等教育更上一层的表现形式,教育的发展是我们社会的根本,那么信息技术的发展又是改变我们生活的重要因素,生活当中各种各样的场景都存在着信息技术的发展。信息技术发展WEB信息化的到来让人们的生活感受到了…

spring Initializr快速创建项目

spring Initializr快速创建项目 创建创建完成后 创建 勾选依赖 创建完成后

Elasticsearch在部署时,对Linux的设置有哪些优化方法?

部署Elasticsearch时,可以通过优化Linux系统的设置来提升性能和稳定性。以下是一些常见的优化方法: 1.文件描述符限制 Elasticsearch需要大量的文件描述符来处理数据和连接,所以确保调整系统的文件描述符限制。可以通过修改 /etc/security/…

如何在 iOS 上安装并使用 ONLYOFFICE 文档

借助 iOS 版文档应用,您可在移动端设备上访问存储于 ONLYOFFICE 账户中的文件,查看和编辑现有文本文档、电子表格和演示文稿,创建新文档并对其进行整理,以及连接第三方云存储服务。您可与其他门户网站用户协作编辑文档&#xff0c…

java知识-JVM线程四大引用

一、JVM (1) 基本概念: JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。 (2) 运行过程&#x…

通过网络和SD卡连接开发板

SD卡 有时候相关代码改动以后想验证能否正常工作,如果编译代码又需要好久,所以可以通过SD卡拷贝到板子里验证: 将SD卡插入读卡器,将读卡器插入ubuntu主机上,将相关带动的代码文件拷贝到SD卡中。假设你的板子已经具备…