爬虫-获取数据

1.爬虫实例:搜索引擎等,数据分析和研究

2.理解:模拟人类访问网站查找信息的行为,可以自动请求网页,并抓取数据下来,然后使用一定规则提取有价值的数据。

3.分类

(1)通用爬虫:搜索引擎抓取系统的重要组成部分,重要是把互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

(2)聚焦爬虫:面向特定需求的一种网络爬虫程序,在实施网页抓取的时候会对内容进行筛选和处理,尽量保证只抓取与需求相关的网页信息。也是我们学习对象。

4、为什么用python来写爬虫程序

语法简洁,效率高,支持模块的多,相关的HTTP请求模块和HTML解析模块非常丰富,还有scrapy和scrapy-redis框架使得开发简单。

5.准备工具

  1. python

  2. pycharm

  3. 虚拟环境

6.http协议和chrome抓包浏览器

(1)什么是http和https协议

HTTP:HyperText Transfer Protocol 超文本传输协议,是一种发布和接收HTML页面的方法。服务器端口号是80端口。

HTTPS协议:是HTTP协议的加密版本,在HTTP下加入了SSL层,服务器端口号是443端口。数据传输更安全

发送一个http请求的过程

  1. 在浏览器地址中输入一个URL并且按了ENTER健,浏览器会向HTTP服务器发生HTTP请求,分为Get和Post两种方法。

  2. 当我们在浏览器中输入URL时,发送一个Request请求获取URL的html文件,服务器把Response文件对象发送回浏览器。

  3. 浏览器分析Response中的HTML,发现其中引用了很多文件比如mages文件,CSS文件,JS文件。浏览器会再次发送Request去获取图片,CSS文件,或者JS文件。

  4. 当所有文件都下载成功后,网页会根据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中,介绍常用的请求头参数

  1. user-Agent:浏览器名称,经常使用,我们开始的User-Agent是python,对于有反爬虫机制的网站,可以判断出来进而阻止该操作。因此我们要设置这个值为一些浏览器的值,来伪装我们的爬虫

  2. Referer:表明当前这个请求是从哪个url过来的,这个一般也可以来做反爬虫机制,如果不是指定页面,就不做响应。如第二页从第一页转入,设置对应参数即可。

  3. 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 爬虫入门

>>>>>>>>>>

  1. 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协议是建议但非约束性,网络爬虫可以不遵守,但存在法律风险。

类人行为可不参考,原则上,但不能用于双叶用途

实例

  1. 京东商品爬取

  2. 亚马逊访问

出现意外错误,如果访问头是爬虫,拒绝

改变请求头部为浏览器标识而不是爬虫库

3.360和百度关键字提交---获取关键词信息的页面

4.网络图片的爬取和下载

获取各种资源

5IP地址归属地的查询

NO.02 实例代码

>>>>>>>>>>

  1. 通用框架

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)相关推荐

  1. python爬虫教程资源_爬虫学习资源整理

    啊,好久没写东西了,发现收到了好多人的私信,我只要有时间都一一回复了,虽说不一定有用,但权当我们互相交流啊,互相学习呀. 最近一篇<我分析了42万字歌词后,终于搞清楚民谣歌手唱什么了>文章 ...

  2. python游走代码_爬虫-案例

    前提:爬虫的实际例子 搜索引擎(百度.谷歌.360搜索等). 伯乐在线. 惠惠购物助手. 数据分析与研究(数据冰山知乎专栏). 抢票软件等. 为什么用Python写爬虫程序: PHP:PHP是世界是最 ...

  3. 爬虫python是干什么的_爬虫是什么?能自学嘛

    1.爬虫是什么 网络爬虫(web crawler 简称爬虫)就是按照一定规则从互联网上抓取信息的程序,既然是程序那和正常用户访问页面有何区别?爬虫与用户正常访问信息的区别就在于:用户是缓慢.少量的获取 ...

  4. python scrapy教程实例_爬虫框架Scrapy的第一个爬虫示例入门教程

    原标题:爬虫框架Scrapy的第一个爬虫示例入门教程 我们使用dmoz.org这个网站来作为小抓抓一展身手的对象. 首先先要回答一个问题. 问:把网站装进爬虫里,总共分几步? 答案很简单,四步: 新建 ...

  5. python爬虫动态数据获取_爬虫系列(9)爬虫的多线程理论以及动态数据的获取方法。...

    NO·1 爬虫之多线程 1. 引入我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 不建议你用这个,不过还是介绍下了,如 ...

  6. python多久能上手_小白学习Python,怎样能够快速入门上手

    原标题:小白学习Python,怎样能够快速入门上手 时至今日,Python已经成为最受欢迎的编程语言之一,清晰易读,适用广泛.在TIOBE 排行榜中位居第四,成为名副其实的人工智能第一语言. 那么零基 ...

  7. 谁的python入门教程好_怎样学习Python?Python入门必看

    Python目前可以用一个字来描述那就是"火",问题来了,这么火的语言零基础小白到底该怎样学习Python? 首先,从基础开始学习,切勿毛躁. 刚开始学习Python的时候,我们可 ...

  8. python语言通俗理解_慢步学习,python语言编程,来扯扯语言的学习理解

    最近慢步工作比较忙,有那么一丢丢挫伤了学习的积极性.积极性受挫的另一个原因是,慢步对自己给读者提供的内容有些困惑,"我能提供什么有价值的内容?" 不断重复书籍的知识点,好像并不能生 ...

  9. python 网页版笔记_系统学习下python网络爬虫 笔记一

    系统学习下python网络爬虫的知识 1.爬虫的定义 Web Spider,把互联网定义为一个蜘蛛网,网络蜘蛛通过网页的链接地址来寻找网页. 具体过程:从网站的某一个网页(通常是首页)开始,读取网页的 ...

  10. python爬虫基本知识_爬虫 (十三) 学习 python 基础知识点的正确姿势 (六)

    我会以比较学习的方式,主要拿Python和我之前学习的javascript进行比较,拿学习javascript的学习经历来迁移到学习Python,如果你在此之前有一门编程思维,那么你可以这么做,如果没 ...

最新文章

  1. 【机器学习基础】机器学习理论最佳入门!周志华宝箱书搭档,开源教程《钥匙书-KeyBook》发布...
  2. SAP CRM One Order关于索引表CRMD_ORDER_INDEX的一些性能问题的分析
  3. mamp 配置php,Mac OSX下使用MAMP安装配置PHP开发环境
  4. memcachedd事件模型
  5. Mysql学习总结(6)——MySql之ALTER命令用法详细解读
  6. C++指针和引用的区别
  7. git21天打卡Day1-linux下安装git
  8. java final形参_求高手回答final形参问题
  9. python数据持久存储:pickle模块的基本使用
  10. 如何在Mac上使用Memoji贴纸、屏幕效果、应用程序和Messages
  11. 【事件驱动】【数码管识别】 封装成DLL的函数的梳理
  12. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
  13. 数据库设计(三)——数据库设计规范
  14. 史上最全法则、效应大全,看一遍受用终身!
  15. wifi连接一段时间才能上网_家里的WiFi老是突然断网,WiFi还是连着的,但是关WiFi又连不上去,必须重启路由器才能上网...
  16. CSB专享实例部署操作手册
  17. JAVA阻止继承:final类和方法
  18. springboot毕设项目养老院信息管理系统kak2w(java+VUE+Mybatis+Maven+Mysql)
  19. Python笔记_07_列表的相关操作_列表相关函数_深浅拷贝_字典相关函数_集合相关函数_冰冻集合
  20. Python多进程和多线程的使用场景

热门文章

  1. 有没有这样一种程序员写代码的利器
  2. iOS-----用LLDB调试,让移动开发更简单(二)
  3. linkin大话设计模式--抽象工厂
  4. 找到你真正喜欢做的事情,坚持下去,坚持多深入一些(转)
  5. UITableViewCell 添加 checkbox 多选
  6. 2010_8_16_Router_路由器的密码恢复
  7. SQL Server中使用索引性能的比较
  8. 虚拟DOM和DIFF算法的理解
  9. 在vue.js中如何导出Excel表格
  10. php 类里面 session,session类方法