简单的爬虫程序(详解)
目录
扒网页
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])
简单的爬虫程序(详解)相关推荐
- python3爬虫实例-python3.7简单的爬虫实例详解
python3.7简单的爬虫,具体代码如下所示: #https://www.runoob.com/w3cnote/python-spider-intro.html #Python 爬虫介绍 impor ...
- python爬虫实例-python3.7简单的爬虫实例详解
python3.7简单的爬虫,具体代码如下所示: #https://www.runoob.com/w3cnote/python-spider-intro.html #Python 爬虫介绍 impor ...
- python爬虫程序详解_Python网络爬虫之三种数据解析方式
指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为大多数情况下的需求,我们都会指 ...
- 爬虫软件python功能_Python 网络爬虫程序详解
#!/usr/bin/python #调用python from sys import argv #导入sys是导入python解释器和他环境相关的参数 from os import makedirs ...
- python 爬虫程序详解
#!/usr/bin/python 使用魔法字符调用python 2 3 from sys import argv 导入sys是导入python解释器和他环境相关的参数 4 from os imp ...
- 从程序详解拒绝服务***
从程序详解拒绝服务*** 拒绝服务(Denial of Service, DoS)***是最简单的网络***形式之一,它只阻止对服务或资源的访问,而不是试图窃取信息.DoS***有两种常见的形式:使 ...
- linux系统设置服务开机启动3种方法,Linux开机启动程序详解
linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明一下ch ...
- STM32利用SPI读写SD卡的程序详解
STM32利用SPI读写SD卡的一些程序详解 关于SD卡的基础知识这里不做过多陈述,如果有对这方面感兴趣的朋友可以直接百度一下,有很多讲SD卡的文章,这里主要是针对SD卡的读写程序实现做一些详细说明. ...
- Dede二次开发程序详解(dede爱好者必备)
Dede二次开发程序详解(dede爱好者必备) 调用说明:推荐会员(带用户头像) [quote] {dede:sql sql="SELECT mid,mtype,userid,uname, ...
- linux怎么读其实很简单 微星为你详解Z77主板BIOS设置
近期,微星科技发布了大量的7系主板,它们全部配备厂商最新的军规三代组件技术,并且同时配备了PCI-E3.0,USB3.0还有SATA3.0技术,所以我们可以称呼它们为微星3.0主板.随着微星Z77主板 ...
最新文章
- 谷歌开源 MobileNetV3:新思路 AutoML 改进计算机视觉模型移动端
- 分析easyVM 未完成)
- 踏平RecyclerView使用的各种坑,跟ListView和GridView说拜拜
- [JSOI2016] 最佳团体(0/1分数规划 + 树形dp)
- [Winodows图形编程]初识双缓冲技术
- 助力双十一,促销海报设计模板收好!
- session登录状态保持html,Flask使用Session和上下文处理器保持登录状态
- ACM - ICPC World Finals 2013 A Self-Assembly
- 一个连衣服都穿不整齐的人,代码也肯定写不整齐。
- Win10系统启动Markdown Pad2 报‘Awesomium.Windows.Controls.WebControl’
- Ubuntu 安装网易云音乐
- 【APP 测试】绕过华为手机打开 USB 调试需要先登录华为账号问题
- css3 设置图片变灰(在微信端不能正常) 和透明
- linux 软链接 相对路径,Linux入门之ln命令创建软链接的绝对路径和相对路径详解(Ubuntu)...
- IC 卡、M1 卡、CPU 卡、SAM 卡、PSAM 卡的联系与区别
- 2018年机器视觉产业技术现状、发展趋势分析及发展前景预测
- [高数][高昆轮][高等数学上][第二章-导数与微分]02.函数的求导法则
- java8高级应用与开发课件和贯穿案例(全)分享
- OpenCV配置(利用Source编译,并配置扩展库opencv_contrib)
- 华为畅享6s可以升级鸿蒙,【华为畅享6S评测】华为畅享6S评测:颜值高又好用的千元机就是它了-中关村在线...