python爬虫重定向问题_爬虫学习(1)
爬虫-获取数据
1.爬虫实例:搜索引擎等,数据分析和研究
2.理解:模拟人类访问网站查找信息的行为,可以自动请求网页,并抓取数据下来,然后使用一定规则提取有价值的数据。
3.分类
(1)通用爬虫:搜索引擎抓取系统的重要组成部分,重要是把互联网上的网页下载到本地,形成一个互联网内容的镜像备份。
(2)聚焦爬虫:面向特定需求的一种网络爬虫程序,在实施网页抓取的时候会对内容进行筛选和处理,尽量保证只抓取与需求相关的网页信息。也是我们学习对象。
4、为什么用python来写爬虫程序
语法简洁,效率高,支持模块的多,相关的HTTP请求模块和HTML解析模块非常丰富,还有scrapy和scrapy-redis框架使得开发简单。
5.准备工具
python
pycharm
虚拟环境
6.http协议和chrome抓包浏览器
(1)什么是http和https协议
HTTP:HyperText Transfer Protocol 超文本传输协议,是一种发布和接收HTML页面的方法。服务器端口号是80端口。
HTTPS协议:是HTTP协议的加密版本,在HTTP下加入了SSL层,服务器端口号是443端口。数据传输更安全
发送一个http请求的过程
在浏览器地址中输入一个URL并且按了ENTER健,浏览器会向HTTP服务器发生HTTP请求,分为Get和Post两种方法。
当我们在浏览器中输入URL时,发送一个Request请求获取URL的html文件,服务器把Response文件对象发送回浏览器。
浏览器分析Response中的HTML,发现其中引用了很多文件比如mages文件,CSS文件,JS文件。浏览器会再次发送Request去获取图片,CSS文件,或者JS文件。
当所有文件都下载成功后,网页会根据HTML语法结构完整显示出来。
7.URL详解
URL uniform resource locator,统一资源定位符,组成成分如下:
scheme://host:port/path/?query-string=xxx#anchor
1.scheme:代表访问的协议,一般为http或者https以及ftp等
2.host:主机名,域名,比如www.baidu.com
3,port:端口号,当访问一个网站时,浏览器默认使用80端口号
4.path:查找路径如www.jianshu.com/trending/now 后面trending/now就是path
5.query-string:查询字符串https://www.baidu.com/s?wd=python,后面的wd=python则是
6.anchor,锚点,前端用来做页面定位的
在浏览器中请求一个url时,浏览器会对url进行编码,除了英文字母和数字和部分符号,其他的全部用%加16进制数字进行编码。
8.常用的请求方法--常用方法,get和post请求,眼见为实
1get请求:一般情况下,只会从服务器获取数据下来,并不会对服务器资源产生任何影响的时候使用get
2.post请求:向服务器发送数据(登录),上传文件等,会对服务器资源产生影响的时候采用post请求
一般情况下遵循使用的原则,但有的网站和服务器为了做反爬虫机制,不按照常理出牌,有可能一个应该使用get方法请求就要改成post请求,视情况而定。
9.请求头常见参数
http协议中,向服务器发送一个请求,数据三个部分,第一个数据放在url中,第二个是在body中(post请求),第三个就是在head中,介绍常用的请求头参数
user-Agent:浏览器名称,经常使用,我们开始的User-Agent是python,对于有反爬虫机制的网站,可以判断出来进而阻止该操作。因此我们要设置这个值为一些浏览器的值,来伪装我们的爬虫
Referer:表明当前这个请求是从哪个url过来的,这个一般也可以来做反爬虫机制,如果不是指定页面,就不做响应。如第二页从第一页转入,设置对应参数即可。
cookie:http是无状态的,同一个人发送两次请求,服务器没有能力知道这两个请求是否来自同一个人,用cookie来标识,一般如果要做登陆后才能访问的网站,那么就需要发送cookie信息。
10.常用的http状态码
1.200 请求正常,服务器正常的返回数据
不代表数据是正确的,只是代表这个发送给服务器的响应是正常的
2. 301:永久重定向。比如在访问 www.jingdong.com 的时候会重定向到 www.jd.com。
3. 302:临时重定向。比如在访问一个需要登录的页面的时候,而此时没有登录,那么就会重定向到登录页面。
4. 400:请求的 url 在服务器上找不到。换句话说就是请求 url 错误。
5. 403:服务器拒绝访问,权限不够。
6. 500:服务器内部错误。可能是服务器出现 bug 了。
chrome抓包工具
elements 网页的结构
console 控制台
source 网站的文件
Network 查看发送给浏览器的请求
NO.01 爬虫入门
>>>>>>>>>>
requests库的使用
(1)安装 打开cmd,输入pip install requests,或者在pycharm中安装。其他软件中安装方法可自行百度。
(2)r=requests.get(url)
构造一个向服务器请求资源的Request对象,返回一个包含服务器资源的Response对象。
参数表:requsts,get(url,params=Nonem*,*kwargs)
url:拟获取页面的url链接
params:url中额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
request方法,调用方便,封装
(2)返回内容 Response
包含返回的信息和我们去请求的信息
对象的属性:r.status_code(访问状态,成功返回200,失败其他如404等)
r.text(返回得到的文本)
r.encoding(从HTTP header中猜测的响应内容的编码方式)存在charset,对编码有要求,则需要返回对应的编码,得到对应信息。如果header中不存在charset,则认为编码为ISO-8859-1,但不可以解析中文,所以如果出现乱码,考虑替换为r.apparent_encoding。
r.apparent_encoding(从内容中分析出的响应内容编码方式(备选编码方式),比encoding比较准确
r.content(响应的二进制形式)
属性的调用的逻辑关系:先看r.status_code看是否正确,如果是,再用后续方法,如果不是,查找原因
(3)总结 r=requests.get(url)可以获取url对应的资源
爬取的框架--准确可靠得到信息
使用get连接存在风险,有异常。
六种异常
理解Requests库的异常
r.raise_For_status()判断返回的是否是200,如果否,产生requests.HTTPError,
爬取网页的通用框架--使得爬取有效稳定和可靠
使用get函数,连接风险最小化
http协议:基于请求和响应模式的无状态的应用层协议
采用url作为定位网络资源的标识
http://host[:port][path]
host:合法Internet主机域名或者IP地址
port:端口号,缺省为80
path请求资源的路径
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
每次操作是独立的,相当于一个黑匣子
post根据提交内容的不同,在服务器上会有不同的处理
而post一样,但会把原来的覆盖
requests.request(method,url,**kwargs)
可以说其他的requests方法是基于request方法封装实现
url:即上文所提到的Internet路径,对应网络资源
**kwargs:13个可选参数,调用时用命名方法来调用参数1.params:字典或者字节序列,作为参数增加到url中
利用get把给定的键值对加到URL后面,访问特定资源
2.data 字典,字节序列或文件对象,作为request的内容
利用post可以存到url链接对应的位置
3.json:JSON格式的数据,作为Request的内容
作为内容,向服务器提交
4.headers:字典,HTTP定制头
利用post可以设置user-agent
5.cookies:字典或者、CookieJar,Request中的cookie
6.auth:元组,支持HTTP认证功能
7.files:字典类型,传输文件
利用post给向某个链接发送文件
8.timeout:设定超时时间,秒为单位
如果在时间内没有返回请求,会产生timeout异常
9.proxies:字典类型,设定访问代理服务器,可以增加登陆认证,掩盖用户原来的爬虫的ip地址,防止逆追踪
10.allow_redirects:Ture/False,默认为True,重定向开关,看允不允许被重定向
11.stream:Ture/False,默认为True,获取内容立即下载开关
12 verify:Ture/False,默认为True,认证SSl证书开关
13 cert:本地SSl证书路径
用到常用的访问参数,所以拿出来使用了,其他放到可选的选项,使用最多的是get方法,来爬取内容, 少用放入一些内容。
网络连接有风险,处理异常很重要
爬虫分类尺寸
(1)Requests 库,小规模(90%),数据量小,爬取速度不敏感,爬取网页,玩转网页
(2)scrapy库 中规模,数据规模较大,爬取速度敏感
爬取网站,爬取系列网站
(3)定制开发:大规模,搜索引擎,爬取速度关键
爬取全网
网络爬虫的骚扰功能
受限于编写水平和目的(供人们访问)网络爬虫会为web服务器带来巨大的资源开销。服务器给人访问点击,速度有限。
网络爬虫的法律风险
服务器上的数据有产权归属
网络爬虫获取数据后牟利将会带来法律风险
网络爬虫泄漏隐私。
具备突破简单访问控制的能力,获得被保护数据从而泄漏个人隐私。
骚扰,法律风险,隐私泄漏
限制爬虫
1.来源审查,判断User-Agent进行限制
检查HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问
2.发布公告,Robots协议
告知所有爬虫网站的爬取策略,要求爬虫遵守。
Robots Exclusion Standard 网路爬虫排除标准
作用:网站告知网络爬虫那些页面可以抓取,那些不行
规范爬虫行为,可以访问的地方网站的维护者更好操作
形式:在网站根目录下的robots.text文件
有禁止访问网站,有禁止访问的爬虫User-agent
User-agent: *
Disallow: /
#注释,*所有。/根目录
http://www.baidu.com/robots.txt 尝试看看
如果没有,默认所有访问可以无限制访问
该如何遵守Robots协议,使得爬虫更好进行
网络爬虫:自动或者人工识别robots.txt,再进行内容爬取
robots协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险。
类人行为可不参考,原则上,但不能用于双叶用途
实例
京东商品爬取
亚马逊访问
出现意外错误,如果访问头是爬虫,拒绝
改变请求头部为浏览器标识而不是爬虫库
3.360和百度关键字提交---获取关键词信息的页面
4.网络图片的爬取和下载
获取各种资源
5IP地址归属地的查询
NO.02 实例代码
>>>>>>>>>>
通用框架
r.encoding从头部的charset得到编码方式,如果没有设定,默认取可能不能识别网站文本信息,通过r.apparent_encoding从内容分析中得到。
通过try和except来处理异常,其中r.raise_for_status:如果r.status_code不是200,连接不成功,引发HTTPError异常
TOMORROW IS A NICE DAY
2.修改user-agent
比如对亚马逊中商品的爬取,直接用URL会显示意外错误,在于未设定的user-agent是和爬虫相关的,被识别出来会拒绝请求。所以需要伪装成正常浏览器访问而非爬虫。
3.百度关键字提交
https://www.baidu.com/s?wd=keyword百度的关键词接口
使用,通过params参数来设定wd
4.网络图片链接格式
http:\\www.example.com/picture.jpg
保存为原名图片文件
TOMORROW IS A NICE DAY
学习笔记,如有不对,请指正。
关注我的公众号,一起学习吧!
python爬虫重定向问题_爬虫学习(1)相关推荐
- python爬虫教程资源_爬虫学习资源整理
啊,好久没写东西了,发现收到了好多人的私信,我只要有时间都一一回复了,虽说不一定有用,但权当我们互相交流啊,互相学习呀. 最近一篇<我分析了42万字歌词后,终于搞清楚民谣歌手唱什么了>文章 ...
- python游走代码_爬虫-案例
前提:爬虫的实际例子 搜索引擎(百度.谷歌.360搜索等). 伯乐在线. 惠惠购物助手. 数据分析与研究(数据冰山知乎专栏). 抢票软件等. 为什么用Python写爬虫程序: PHP:PHP是世界是最 ...
- 爬虫python是干什么的_爬虫是什么?能自学嘛
1.爬虫是什么 网络爬虫(web crawler 简称爬虫)就是按照一定规则从互联网上抓取信息的程序,既然是程序那和正常用户访问页面有何区别?爬虫与用户正常访问信息的区别就在于:用户是缓慢.少量的获取 ...
- python scrapy教程实例_爬虫框架Scrapy的第一个爬虫示例入门教程
原标题:爬虫框架Scrapy的第一个爬虫示例入门教程 我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建 ...
- python爬虫动态数据获取_爬虫系列(9)爬虫的多线程理论以及动态数据的获取方法。...
NO·1 爬虫之多线程 1. 引入我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 不建议你用这个,不过还是介绍下了,如 ...
- python多久能上手_小白学习Python,怎样能够快速入门上手
原标题:小白学习Python,怎样能够快速入门上手 时至今日,Python已经成为最受欢迎的编程语言之一,清晰易读,适用广泛.在TIOBE 排行榜中位居第四,成为名副其实的人工智能第一语言. 那么零基 ...
- 谁的python入门教程好_怎样学习Python?Python入门必看
Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...
- python语言通俗理解_慢步学习,python语言编程,来扯扯语言的学习理解
最近慢步工作比较忙,有那么一丢丢挫伤了学习的积极性.积极性受挫的另一个原因是,慢步对自己给读者提供的内容有些困惑,"我能提供什么有价值的内容?" 不断重复书籍的知识点,好像并不能生 ...
- python 网页版笔记_系统学习下python网络爬虫 笔记一
系统学习下python网络爬虫的知识 1.爬虫的定义 Web Spider,把互联网定义为一个蜘蛛网,网络蜘蛛通过网页的链接地址来寻找网页. 具体过程:从网站的某一个网页(通常是首页)开始,读取网页的 ...
- python爬虫基本知识_爬虫 (十三) 学习 python 基础知识点的正确姿势 (六)
我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前有一门编程思维,那么你可以这么做,如果没 ...
最新文章
- 【机器学习基础】机器学习理论最佳入门!周志华宝箱书搭档,开源教程《钥匙书-KeyBook》发布...
- SAP CRM One Order关于索引表CRMD_ORDER_INDEX的一些性能问题的分析
- mamp 配置php,Mac OSX下使用MAMP安装配置PHP开发环境
- memcachedd事件模型
- Mysql学习总结(6)——MySql之ALTER命令用法详细解读
- C++指针和引用的区别
- git21天打卡Day1-linux下安装git
- java final形参_求高手回答final形参问题
- python数据持久存储:pickle模块的基本使用
- 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
- 【事件驱动】【数码管识别】 封装成DLL的函数的梳理
- 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
- 数据库设计(三)——数据库设计规范
- 史上最全法则、效应大全,看一遍受用终身!
- wifi连接一段时间才能上网_家里的WiFi老是突然断网,WiFi还是连着的,但是关WiFi又连不上去,必须重启路由器才能上网...
- CSB专享实例部署操作手册
- JAVA阻止继承:final类和方法
- springboot毕设项目养老院信息管理系统kak2w(java+VUE+Mybatis+Maven+Mysql)
- Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合
- Python多进程和多线程的使用场景