新媒体课堂:pythoPython爬虫实战二

查看上一节:python爬虫分类和robots协议
python爬虫urllib使用和进阶上节课已经介绍了爬虫的基本概念和基础内容 , 接下来就要开始内容的爬取了 。
其实爬虫就是浏览器 , 只不过它是一个特殊的浏览器 。 爬取网页就是通过HTTP协议访问相应的网页 , 不过通过浏览器访问往往是人的行为 , 把这种行为变成使用程序来访问就是爬虫的过程 。
用户在使用浏览器的时候 , 翻阅速度是比较慢的 , 但是爬虫在访问的时候速度是很快的 , 它会很快的获取到页面上的内容 , 并将其变成自己网站的内容 , 所以对于开发者来讲 , 对于这些搜索引擎的爬虫是又爱又恨的 。
有的网站会设置反爬虫策略来拒绝爬虫对网站内容的爬取要求 。 此时我们要爬取这种网站的话 , 是要对程序进行包装的 , 尽量去模拟人的行为来获取网站内容 。
urllib包urllib是Python提供的一个工具包 , 用来处理url和相应的一些内容的 。
Python2中提供了urllib和urllib2 。 urllib提供较为底层的接口 , urllib2对urllib进行了进一步封装 。 Python3中将urllib合并到了urllib2中 , 并只提供了标准库urllib包 。 我们重点使用的是Python3 , 但是它们的接口都是相同的 , 掌握了就可以在任何场景使用 。
urllib还有一些子包 , 分别介绍下:
urllib.request模块(用的比较多)用于打开和读写url 。 模块定义了在基本和摘要式身份验证、重定向、cookies等应用中打开URL(主要是HTTP)的函数和类 。
urllib.error包含了由urllib.request引起的异常urllib.parse用于解析urlurllib.robotparser分析robots.txt文件urlopen方法格式:urlopen(url , data=https://pcff.toutiao.jxnews.com.cn/p/20200411/None)注释:url是链接地址字符串 , 或请求对象 。 data是提交的数据 , 如果data为None发起GET请求 , 否则发起POST请求 。 见urllib.request.Request#get_method返回http.client.HTTPResponse类的响应对象 , 这是一个类文件对象 。 接下来看一段代码:
新媒体课堂:pythoPython爬虫实战二
文章图片
验证其中的“返回真正的URL”:打开http://www.bing.com按下F12打开其中的Network状态栏 , 点击刷新:
新媒体课堂:pythoPython爬虫实战二
文章图片
可以看到第一个访问的是必应网站 , 这里的301代表的意思是 , 首先打开必应的网站 , 然后通过持久的移动到中国的必应网站;这里的location是跳转位置 , 301代表永久的跳转 , 302代表的是临时的跳转;代码运行结果:
新媒体课堂:pythoPython爬虫实战二
文章图片
可以发现 , urlopen是可以自动跳转的 。 总结:上例 , 通过urllib.request.urlopen方法 , 发起一个HTTP的GET请求 , WEB服务器返回了网页内容 。 响应的数据被封装到类文件对象中 , 可以通过read方法、readline方法、readlines方法获取数据 , status和reason属性表示返回的状态码 , info方法返回头信息 , 等等 。 User-Agent问题上例的代码非常精简 , 即可以获得网站的响应数据 。 urlopen方法只能传递url和data这样的数据 , 不能构造HTTP的请求 。 例如useragent 。 源码中构造的useragent如下:
新媒体课堂:pythoPython爬虫实战二
文章图片
当前显示为:Python-urllib/3.6有些网站是反爬虫的 , 所以要把爬虫伪装成浏览器 。 随便打开一个浏览器 , 复制浏览器的UA值 , 进行伪装 。 UA值获取方法:打开浏览器的设置 。 选择高级 , 选择自定义UserAgent字符串 , 随意切换想要的UA值 。
新媒体课堂:pythoPython爬虫实战二