网络爬虫使用程序代码来访问网站,而非人类亲自点击访问,因此爬虫程序也被叫做“爬虫机器人”。绝大网站都具备一定的反爬能力,禁止网络爬虫大量访问网站,以免给网站服务器带来压力
import urllib.request
from urllib import request
#导包,使用urllib库的request模块
response = urllib.request.urlopen('http://www.baidu.com/')
html = response.read().decode('utf-8')
print(html)
python内置的urllib库获取网页的html信息。urllib库属于python的标准模块。是python爬虫的常用模块。
urllib的模块如下:
- 1.urlopen():表示向网站发起请求并获取响应对象
urllib.request.urlopen(url,timeout)
urlopen()有两个参数:url 表示要爬取的数据的url地址,timeout:表示等待超时时间,指定时间内未得到响应就抛出超市异常
urllib库有几个模块:
- resquest 请求网址的模块
- error 异常处理模块
- parse 用于修改拼接的模块
- robotparser 判断那些网站可以爬,那些网站不能爬
urlopen()
向网站发出请求,获得响应对象
urllib.request.urlopen(urt,timeout)
- url表示要爬取数据的地址
- timeout:设置等待时间,超过时间显示异常
其中 urlopen() 表示打开一个网页地址。注意:请求的 url 必须带有 http 或者 https 传输协议。
- bytes = response.read() # read()返回结果为 bytes 数据类型
- string = response.read().decode() # decode()将字节串转换为 string 类型
- url = response.geturl() # 返回响应对象的URL地址
- code = response.getcode() # 返回请求时的HTTP响应码
- 查看网站是否请求爬取成功,status函数就是状态,返回404就是失败,返回220就表示成功了
Resquest()
该方法用于创建请求对象,包装请求头
urllib.request.Resquest(url,headers)
- url 请求的url的地址
- headers 重构请求头
因为有很多的网站禁止网爬虫访问网站,以免给服务器带来压力。我们可以使用user-Agent来修改请求头。
出现了python3.7,如果直接爬取,服务器会知道这是网络爬虫。所以我们要修改请求头,伪装一下
这个时候就被修改成mac在访问它
在headers的{ }中要加加入**”user-Agent“:” “** 后面加入常见的请求头
常见的user-Agent请求头
系统 | 浏览器 | User-Agent字符串 |
---|---|---|
Mac | Chrome | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36 |
Mac | Firefox | Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:65.0) Gecko/20100101 Firefox/65.0 |
Mac | Safari | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15 |
Windows | Chrome | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36 |
Windows | Edge | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763 |
Windows | IE | Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko |
iOS | Chrome | Mozilla/5.0 (iPhone; CPU iPhone OS 7_0_4 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) CriOS/31.0.1650.18 Mobile/11B554a Safari/8536.25 |
iOS | Safari | Mozilla/5.0 (iPhone; CPU iPhone OS 8_3 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12F70 Safari/600.1.4 |
Android | Chrome | Mozilla/5.0 (Linux; Android 4.2.1; M040 Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36 |
Android | Webkit | Mozilla/5.0 (Linux; U; Android 4.4.4; zh-cn; M351 Build/KTU84P) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 |
但是当URL路径中带有中文或者特殊字符的时候,就要对URL进行编码,使用安全字符去表示那些不安全的字符。
URL组成
URL有一些,协议,域名,端口号,路径和查询字符串
URL 中只允许使用 ASCII 字符集可以显示的字符,比如英文字母、数字、和- _ . ~ ! *
这 6 个特殊字符。当在 URL 中使用不属于 ASCII 字符集的字符时,就要使用特殊的符号对该字符进行编码,比如空格需要用%20
来表示。
字符 | 含义 | 十六进制值编码 |
---|---|---|
+ | URL 中 + 号表示空格 | %2B |
空格 | URL中的空格可以编码为 + 号或者 %20 | %20 |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |