目录

扒网页

urllib的基本使用

requset.urlopen(url,data,timeout)

response.read()

response.getcode()

response.geturl()

response.info()

request对象的使用

发送请求/响应header头的含义:

urllib发送get请求

注意:


扒网页

其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS。如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服。所以最重要的部分是存在于HTML

  • HTML 70%
  • JS 20%
  • CSS 10%

扒取页面的代码如下:

from urllib.request import urlopen# 请求的地址
url = 'http://www.baidu.com/'# 发送请求
resp = urlopen(url)#打印响应结果
print(resp.read().decode()[:1000])

注意

urllib模块库是python自带的。在Python2叫urllib2

这里真正的程序就两行,这个网页的码源就被扒下来了。(当然这里抓取了前1000个,太多了不展示了)

urllib的基本使用

requset.urlopen(url,data,timeout)

其中第一个参数url即为URL,是必须要传送的,

第二个参数为data是访问url时要传送的数据,

第三个参数timeout是设置超时时间。

第二三个参数是可以不传送的,data默认为空None,timeout默认为      ​​​​​            socket._GLOBAL_DEFAULT_TIMEOUT

response.read()

read()方法就是读取文件里的全部内容,返回bytes类型

response.getcode()

返回 HTTP的响应码,成功返回200,4服务器页面出错,5服务器问题

response.geturl()

返回 返回实际数据的实际URL,防止重定向问题

response.info()

返回 服务器响应的HTTP报头

from urllib.request import urlopen# 定义发送的位置
url = 'http://www.baidu.com/'# 发送请求
resp = urlopen(url)# 打印响应的数据
print(resp.read()[:100])# 获取响应码
print(resp.getcode())# 获取访问的url
print(resp.geturl())# 获取响应头信息
print(resp.info())

获取结果:

request对象的使用

使用urllib.request.urlopen发送请求时,可以将参数封装到一个Request对象中。

参数包含:

  • url 发送的请求链接
  • headers 请求头信息
  • data 请求数据

使用request对象进行封装参数,可以很好的进行伪装,为什么要伪装?看下图:

我们可以看到我们的User-Agent为python-urllib/3.9,这别人一看这个软件环境就知道是程序在访问他的网站,所以说我们得伪装自己称浏览器,那么怎么获取自己的User-Agent呢。

有两种方法:

再通过request来对其进行封装就可以实现伪装浏览器访问的效果。

代码如下:

from urllib.request import urlopen
from urllib.request import Request#url = 'http://www.baidu.com/'
url = 'http://httpbin.org/get'#定义headers信息
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/103'}
#创建Request对象
req = Request(url,headers=headers)#发送请求
resp = urlopen(req)#打印响应结果
print(resp.read().decode())

效果:

发送请求/响应header头的含义:

名称 含义
Accept 告诉服务器,客户端支持的数据类型
Accept-Charset 告诉服务器,客户端采用的编码
Accept-Encoding 告诉服务器,客户机支持的数据压缩格式
Accept-Language 告诉服务器,客户机的语言环境
Host 客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since 客户机通过这个头告诉服务器,资源的缓存时间
Referer 客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
User-Agent 客户机通过这个头告诉服务器,客户机的软件环境
Cookie 客户机通过这个头告诉服务器,可以向服务器带数据
Refresh 服务器通过这个头,告诉浏览器隔多长时间刷新一次
Content-Type 服务器通过这个头,回送数据的类型
Content-Language 服务器通过这个头,告诉服务器的语言环境
Server 服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding 服务器通过这个头,告诉浏览器数据采用的压缩格式
Content-Length 服务器通过这个头,告诉浏览器回送数据的长度

urllib发送get请求

为什么要发送get请求?这是因为我们在浏览器中输入一个url地址访问的时就是get请求。

大部分被传输到浏览器的HTML,images,js,css等都是通过get方法发送请求的。它是获取数据的主要方法。

注意:

GET请求发送参数时需要转码才可以使用。

转码的两种方法:

1.quote:转化一个值

 2.urlencode:转化键值对

这是转化一个值的代码(键值对只需修改一点点即可):

from urllib.request import Request,urlopen
from urllib.parse import quote#url的参数里不能有中文args = 'python爬虫'
url = f'https://www.baidu.com/s?wd={quote(args)}'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.12022 SLBChan/103'}
req = Request(url,headers=headers)
resp = urlopen(req)
print(resp.read().decode()[:1500])

简单的爬虫程序(详解)相关推荐

  1. python3爬虫实例-python3.7简单的爬虫实例详解

    python3.7简单的爬虫,具体代码如下所示: #https://www.runoob.com/w3cnote/python-spider-intro.html #Python 爬虫介绍 impor ...

  2. python爬虫实例-python3.7简单的爬虫实例详解

    python3.7简单的爬虫,具体代码如下所示: #https://www.runoob.com/w3cnote/python-spider-intro.html #Python 爬虫介绍 impor ...

  3. python爬虫程序详解_Python网络爬虫之三种数据解析方式

    指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指 ...

  4. 爬虫软件python功能_Python 网络爬虫程序详解

    #!/usr/bin/python #调用python from sys import argv #导入sys是导入python解释器和他环境相关的参数 from os import makedirs ...

  5. python 爬虫程序详解

    #!/usr/bin/python 使用魔法字符调用python 2  3 from sys import argv  导入sys是导入python解释器和他环境相关的参数 4 from os imp ...

  6. 从程序详解拒绝服务***

    从程序详解拒绝服务*** 拒绝服务(Denial of Service,  DoS)***是最简单的网络***形式之一,它只阻止对服务或资源的访问,而不是试图窃取信息.DoS***有两种常见的形式:使 ...

  7. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明一下ch ...

  8. STM32利用SPI读写SD卡的程序详解

    STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...

  9. Dede二次开发程序详解(dede爱好者必备)

    Dede二次开发程序详解(dede爱好者必备) 调用说明:推荐会员(带用户头像)  [quote] {dede:sql sql="SELECT mid,mtype,userid,uname, ...

  10. linux怎么读其实很简单 微星为你详解Z77主板BIOS设置

    近期,微星科技发布了大量的7系主板,它们全部配备厂商最新的军规三代组件技术,并且同时配备了PCI-E3.0,USB3.0还有SATA3.0技术,所以我们可以称呼它们为微星3.0主板.随着微星Z77主板 ...

最新文章

  1. 谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端
  2. 分析easyVM 未完成)
  3. 踏平RecyclerView使用的各种坑,跟ListView和GridView说拜拜
  4. [JSOI2016] 最佳团体(0/1分数规划 + 树形dp)
  5. [Winodows图形编程]初识双缓冲技术
  6. 助力双十一,促销海报设计模板收好!
  7. session登录状态保持html,Flask使用Session和上下文处理器保持登录状态
  8. ACM - ICPC World Finals 2013 A Self-Assembly
  9. 一个连衣服都穿不整齐的人,代码也肯定写不整齐。
  10. Win10系统启动Markdown Pad2 报‘Awesomium.Windows.Controls.WebControl’
  11. Ubuntu 安装网易云音乐
  12. 【APP 测试】绕过华为手机打开 USB 调试需要先登录华为账号问题
  13. css3 设置图片变灰(在微信端不能正常) 和透明
  14. linux 软链接 相对路径,Linux入门之ln命令创建软链接的绝对路径和相对路径详解(Ubuntu)...
  15. IC 卡、M1 卡、CPU 卡、SAM 卡、PSAM 卡的联系与区别
  16. 2018年机器视觉产业技术现状、发展趋势分析及发展前景预测
  17. [高数][高昆轮][高等数学上][第二章-导数与微分]02.函数的求导法则
  18. java8高级应用与开发课件和贯穿案例(全)分享
  19. OpenCV配置(利用Source编译,并配置扩展库opencv_contrib)
  20. 华为畅享6s可以升级鸿蒙,【华为畅享6S评测】华为畅享6S评测:颜值高又好用的千元机就是它了-中关村在线...

热门文章

  1. 数学建模——数据分析、描述性统计
  2. 软件测试缺陷分析方法简介
  3. android 设置动画时间,android动画学习之动画参数设置
  4. Saturn Java作业SpringBoot方式开发打包
  5. Origin绘图教程(一)
  6. 解密PDF文件打开密码
  7. 外交部发言人与BBC恳谈绿坝和娃
  8. STK Engine二次开发-WPF方式
  9. 基于FPGA的HDMI输出接口设计
  10. 【数字化】国产自主智能制造数字化车间