工信部的网站备案信息查询,成立公司需要几个股东,系统优化因素,wordpress某个页面全屏显示目录
一、前言框架
二、网址请求
2.1 打开网址
2.2 超时设置
2.3 错误抓取
三、更深请求
3.1 打开网址
3.2 请求头添加
3.3 链接解析
四、Robots 协议 五.万能视频下载 小彩蛋 一、前言框架
我们来学一下爬虫之祖urlib#xff0c;不管你什么模块都是起源于该模块。…目录
一、前言框架
二、网址请求
2.1 打开网址
2.2 超时设置
2.3 错误抓取
三、更深请求
3.1 打开网址
3.2 请求头添加
3.3 链接解析
四、Robots 协议 五.万能视频下载 小彩蛋 一、前言框架
我们来学一下爬虫之祖urlib不管你什么模块都是起源于该模块。 urlib库有几个模块依次如下
request 用于请求网址的模块error异常处理模块parse用于修改拼接等的模块robotparser用来判断哪些网站可以爬哪些网站不可以爬
二、网址请求
2.1 打开网址
以请求我自己的博客为例子我博客链接为
https://blog.csdn.net/qq_25990967/article/details/121366143?spm1001.2014.3001.5501
我们使用urlib库中的request模块如下
import urllib.request response urllib.request.urlopen(https://blog.csdn.net/qq_25990967/article/details/121366143?spm1001.2014.3001.5501) print(response.read().decode(utf-8))#调用 read 方法可以得到返回的网页内容打印网页内容运行结果
我们接着来看看其它的问题如何才知道自己请求网址成功我可不想每次都把他打印出来才看自己成功没有。 我们使用status函数来查看这个单词就是状态的意思如果返回结果为200就是请求成功404就是请求失败的意思。 假设我请求自己博客
import urllib.request
response urllib.request.urlopen(https://blog.csdn.net/qq_25990967/article/details/121366143?spm1001.2014.3001.5501)
print(response.status) 运行 可以看到是200代表请求成功了。那么我们来请求一个别的网址呢比如我们现在来请求国外的facebook:
import urllib.request
response urllib.request.urlopen(https://www.facebook.com/)
print(response.status) 运行 不出所料失败了这也没关系正常的。
2.2 超时设置
我们只需要加上timeout参数即可为什么我们要用超时设置因为有些网站我们不能马上请求进入有可能是自己网络原因也有可能是对方服务器卡顿等原因因此需要设置一下超过规定的时间就不去请求了。 举个例子我要请求打开github不能超过十秒如果超过十秒就不请求了。
import urllib.request
response urllib.request.urlopen(https://github.com/,timeout10)
print(response.status) 运行看看 显示time out意思就是超时打开错误如果你把请求十秒钟改为30秒再去试试能否成功毕竟国内上github会卡很正常
2.3 错误抓取
前面我们遇到了请求超时就会报错出一大堆假如先去判是否请求成功需要用try…except来获取报错信息具体如下
import socket
import urllib.request
import urllib.error try: response urllib.request.urlopen(https://github.com/, timeout5)
except urllib.error.URLError as e: if isinstance(e.reason, socket.timeout): print(请求超时)运行看看
三、更深请求
3.1 打开网址
import urllib.request
request urllib.request.Request(https://www.csdn.net/?spm1011.2124.3001.5359)
responseurllib.request.urlopen(request)
print(response.read().decode(utf-8))说一下每一行大概是什么。
第一行导入模块第二行用Requests请求网址第三行再用urlopen打开网址第四行用read打印内容
运行看看
3.2 请求头添加
为什么要添加请求头请求头的作用是模拟浏览器去爬取内容主要是为了被反扒。 有个新词反扒 为什么会被反扒因为有些网站是不允许你去爬取的但是我们就是需要爬取内容因此我们使用请求头来模拟进行。请求头的添加能帮助我们解决百分之八十的反扒不用担心我后面的反扒技术我都会教大家。 看个例子我们已爬取CSDN首页为例子
from urllib import request
urlhttps://www.csdn.net/?spm1011.2124.3001.5359
headers{User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36}reqrequest.Request(urlurl,headersheaders)
responserequest.urlopen(req)
print(response.read().decode(utf-8))大概说一些每一行的例子:
第一行从库导入模块第二行就是我们需要请求的网址第三行就是我们的请求头固定这个模式不用去背以后添加请求头复制粘贴就行第四行就是使用请求头去请求网址第五行请求成功打开网址urlopen翻译过来就是打开网址的意思啊第六行用read打印内容
3.3 链接解析
我直接以CSDN官网首页为例子。1.urlparse
from urllib.parse import urlparse
surlparse(https://www.csdn.net/?spm1011.2124.3001.5359)#解析的网址
print(type(s),s)#打印类型和解析结果看看打印结果
分析下结果 ParseResult这个类型对象打印了六个部分结果 scheme是协议这里协议就是https netloc是域名域名是啥就步说了吧自己百度 path是访问路径 params就是参数 query就是查询条件一般用作get类型的url fragment就是描点用于定位页面内部下拉位置 所以网址的标准链接格式就是
scheme//netloc/pathparams?query#fragment这些能看懂一个网址什么组成的了吧2.urlunparse 与第一个对立他接受的参数是可迭代对象对象长度必须是6
from urllib.parse import urlunparse
data[http,www.baidu.com,index.com,user,a7,comment]
print(urlunparse(data))结果如下
这就构造了一个url当然随便构造一个url是不能正常访问的。对比上面的urlparse一个是拆分url这个就是构造url。3.urlsplit 跟urlparse类似知识返回结果只有五个params合并到了path中
from urllib.parse import urlsplit
surlsplit(https://www.csdn.net/?spm1011.2124.3001.5359)
print(type(s),s)老规矩还是以CSDN首页为例子看打印结果
但是呢SplitResult是元组类型可以通过索取获得想要的不用都打印出来
from urllib.parse import urlsplit
surlsplit(https://www.csdn.net/?spm1011.2124.3001.5359)
# print(type(s),s)
print(s.path)
print(s.netloc)
print(s[1])
print(s[3])这样打印结果姐如下
4.urlunsplit() 跟上面那个方法类似这个就是再把各个部分组合成完整的链接长度必须是5举例如下
from urllib.parse import urlunsplit
data[http,www.csdn.net,/,spm1011.2124.3001.5359, ]
print(urlunsplit(data))根据前面打印拆分结果我再给它复原了运行结果如下又得到csdn首页链接了
5.urljoin 就是对链接的补充合并自己可以多打印几个试试
from urllib.parse import urljoin
print(urljoin(http://www.baidu.com,index.html))
print(urljoin(http://www.baidu.com,http://www.baidu.com/index.html))效果如下
6.urlencode 跟上面的类似也是用于构造url 例子如下
from urllib.parse import urlencode
parms{name:benxiaohai,age:21
}
b_urlhttp://www.baidu.com?
urlb_urlurlencode(parms)
print(url)结果
7.parse_qs
from urllib.parse import parse_qs
unamebenxiaohaiage21
print(parse_qs(u))parse_qs作用就是把得到的get请求参数字符串转为字典这样便于好看理解。前面都是有序列化这个就是反无序化。
8.parse_sql
from urllib.parse import parse_qsl
unamebenxiaohage21
print(parse_qsl(u))效果 跟上面第七个方法类似这个就是返回的列表列表里装的元组元组左边为名右边为值9.quote
from urllib.parse import quote
key笨小孩
urlhttp://www.baidu.com/?wdquote(key)
print(url)这个很常见我的理解就是把中文转换为url格式。对中文进行编码。
10.unquote
from urllib.parse import unquote
urlhttp://www.baidu.com/?wd%E7%AC%A8%E5%B0%8F%E5%AD%A9
print(unquote(url))它就可以把被编码后的中文还原。
这个模块差不多就这些了学习爬虫慢慢来不要一蹴而就。有了这个模块就可以对url解析和构造了。
四、Robots 协议
虽然我在教大家爬虫但是我还是要声明一下不要什么都去爬所以我们来看下哪些可以爬哪些不可以爬这就要根据robots协议了。当然我们可能不会完全遵守他的协议不然爬虫也没啥意思了自己把握分寸
首先我们来学会一下如何查看协议比如我们要访问CSDM网址
https://www.csdn.net/查看协议就是在网址后面加上robots.txt
https://www.csdn.net/robots.txt输入回车 看看这个协议的含义 user-agent后面是蜘蛛的名称表示一种代理的意思 disallowed: 表示禁止后面的内容蜘蛛禁止抓取 allowed 表示允许蜘蛛抓取后面文件的内容
好家伙CSDN全部不允许爬哈哈哈没事适当爬可以的。
五.万能视频下载
一下代码只能在pycharm里运行
首先介绍一下you-get库非常的强大hhhhhhh
安装方法
pip install you_get
下载代码
import sys
from you_get import common as you_get# 导入you-get库# 设置下载目录
directoryrmp4\\
# 要下载的视频地址
urlhttps://music.163.com/#/mv?id14306186
# 传参数
sys.argv[you-get,-o,directory,--formatflv,url]
you_get.main()
输出 小彩蛋
import sys
from you_get import common as you_getwhile True:tarinput(r请输入保存地址)url input(请输入视频网址)if bilibili in url:sys.argv [you_get, -o, tar, --formatdash-flv, url]elif iqiyi in url:sys.argv [you-get, -o, tar, --formatSD, url]elif youku in url:sys.argv [you-get, -o, tar, --formatmp4hd, url]else:passyou_get.main()print(sucessfull)a input(是否继续继续按1否则按2)if a 2:break
print(下载成功)