一、基础模块
- request :用于请求网址的模块
- error:异常处理模块
- parse:用于修改拼接等的模块
- robotparser:用来判断哪些网站可以爬,哪些网站不可以
二、urllib使用
以自己的博客为例
https://blog.csdn.net/m0_60960867?spm=3001.5343
①请求网址
import urllib.request
requset = urllib.request.Request('https://blog.csdn.net/m0_60960867?spm=3001.5343')
response = urllib.request.urlopen(requset)
print(response.status)
print(response.read().decode('utf-8'))
分析
- urllib.request.Request('url') 请求网址语句
- urllib.request.urlopen('url') 打开网址
- 使用.read() 获得返回的页面内容
- .decode('utf-8') 编码格式为utf-8
- .status 为请求的状态码。200请求成功,404请求失败
运行结果:
②UA伪装
我们需要将自己伪装成浏览器去请求网址,这样才不会被反扒。
import urllib.request
url='https://blog.csdn.net/m0_60960867?spm=3001.5343'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29'}
requset= urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(requset)
print(response.status)
print(response.read().decode('utf-8'))
运行结果:
③超时设置与异常处理
正常情况下网站可能因为网络连接不好或者对方服务器卡顿,我们无法立刻请求进入,这时就需要超时设置
使用参数timeout在urllib.request.urlopen()中
单位为秒
import urllib.request
url='https://blog.csdn.net/m0_60960867?spm=3001.5343'
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36 Edg/96.0.1054.29'}
requset= urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(requset,timeout=10)
print(response.status)
print(response.read().decode('utf-8'))
当我们遇到请求超时,就会有报错信息,当然我们可以直接使用urllib的error模块和try……except来更直观的显示超时错误。
import socket
import urllib.request
import urllib.error
try:
response = urllib.request.urlopen('https://github.com/', timeout=5)
except urllib.error.URLError as e:
if isinstance(e.reason, socket.timeout):
print('请求超时')
三、Robots 协议
Robots协议(也称为爬虫协议、机器人协议等)。网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。是网站国际互联网界通行的道德规范。
在我们进行爬虫的时候需要注意网站的Robots协议避免踩雷。
①Robots协议查看
https://www.csdn.net/robots.txt
在网站后加robots.txt就行,得到
- user-agent:后面是蜘蛛的名称,表示一种代理的意思;
- disallowed: 表示禁止,后面的内容蜘蛛禁止抓取;
- allowed :表示允许蜘蛛抓取后面文件的内容;