爬虫入门

爬虫(又被称为网页蜘蛛,网络机器人)就是模拟客户端发送网络请求,接收请求响应,一种按照必定的规则,自动地抓取互联网信息的程序。css

原则上,只要是浏览器(客户端)能作的事情,爬虫都可以作。html

根据被爬网站的数量的不一样,咱们把爬虫分为:shell

  • 通用爬虫 :一般指搜索引擎的爬虫浏览器

  • 聚焦爬虫 :针对特定网站的爬虫缓存

Robots协议:网站经过Robots协议告诉搜索引擎哪些页面能够抓取,哪些页面不能抓取,但它仅仅是道德层面上的约束。安全

浏览器会主动请求js,css等内容,js会修改页面的内容,js也能够从新发送请求,最后浏览器渲染出来的内容在elements中,其中包含css,图片,js,url地址对应的响应等。服务器

可是在爬虫中,爬虫只会请求url地址,对应的拿到url地址对应的响应。浏览器渲染出来的页面和爬虫请求的页面并不同。因此在爬虫中,须要以url地址对应的响应为准来进行数据的提取。cookie

 

url的形式:scheme://host[:port#]/path/…/[?query-string][#anchor]网络

  • scheme:协议(例如:http, https, ftp)
  • host:服务器的IP地址或者域名
  • port:服务器的端口(若是是走协议默认端口,80 or 443)
  • path:访问资源的路径
  • query-string:参数,发送给http服务器的数据
  • anchor:锚(跳转到网页的指定锚点位置)

HTTP:超文本传输协议,默认端口号:80
HTTPS:HTTP + SSL(安全套接字层),默认端口号:443       (HTTPS比HTTP更安全,可是性能更低)并发

HTTP常见请求头

  1. Host (主机和端口号)
  2. Connection (连接类型)
  3. Upgrade-Insecure-Requests (升级为HTTPS请求)
  4. User-Agent (浏览器名称)
  5. Accept (传输文件类型)
  6. Referer (页面跳转处)
  7. Accept-Encoding(文件编解码格式)
  8. Cookie (Cookie)
  9. x-requested-with :XMLHttpRequest (是Ajax 异步请求)

常见的请求方法

  • GET
  • POST

有关 GET 请求的其余一些注释:

  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不该在处理敏感数据时使用
  • GET 请求有长度限制
  • GET 请求只应当用于取回数据

有关 POST 请求的其余一些注释:

  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求

响应状态码(status code)

常见的状态码:

  • 200:成功
  • 302:临时转移至新的url
  • 307:临时转移至新的url
  • 404:not found
  • 500:服务器内部错误

代理IP的分类:

透明代理(Transparent Proxy),透明代理虽然能够直接“隐藏”你的IP地址,可是仍是能够从HTTP_X_FORWARDED_FOR来查到你是谁。

匿名代理(Anonymous Proxy),匿名代理比透明代理进步了一点:别人只能知道你用了代理,没法知道你是谁。

混淆代理(Distorting Proxies),与匿名代理相同,若是使用了混淆代理,别人仍是能知道你在用代理,可是会获得一个假的IP地址,假装的更逼真。

高匿代理(Elite proxy或High Anonymity Proxy),高匿代理让别人根本没法发现你是在用代理,因此是最好的选择。

 

Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,咱们只须要实现少许的代码,就可以快速的抓取。

Scrapy 使用了Twisted['twɪstɪd]异步网络框架,能够加快咱们的下载速度。

 

  • 异步:调用在发出以后,这个调用就直接返回,无论有无结果
  • 非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能马上获得结果以前,该调用不会阻塞当前线程。

scrapy的流程

 

 

 

 

从上图能够衍生出下图,我的以为更加好理解一些

 

其流程能够描述以下:

  1. 调度器把requests-->引擎-->下载中间件--->下载器
  2. 下载器发送请求,获取响应---->下载中间件---->引擎--->爬虫中间件--->爬虫
  3. 爬虫提取url地址,组装成request对象---->爬虫中间件--->引擎--->调度器
  4. 爬虫提取数据--->引擎--->管道
  5. 管道进行数据的处理和保存

scrapy中每一个模块的具体做用:

scrapy项目实现流程:

  • 建立一个scrapy项目:scrapy startproject +<项目名字>

  • 生成一个爬虫:scrapy genspider +<爬虫名字> + <容许爬取的域名>

  • 提取数据:完善spider,使用xpath等方法

  • 保存数据:pipeline中保存数据

scrapy.cfg :项目的配置文件
mySpider/ :项目的Python模块,将会从这里引用代码
mySpider/items.py :项目的目标文件
mySpider/pipelines.py :项目的管道文件
mySpider/settings.py :项目的设置文件
mySpider/spiders/ :存储爬虫代码目录

认识scrapy的debug信息

每次程序启动后,默认状况下,终端都会出现不少的debug信息,那么下面咱们来简单认识下这些信息

scrapy shell的使用

  • response.url:当前响应的url地址
  • response.request.url:当前响应对应的请求的url地址
  • response.headers:响应头
  • response.body:响应体,也就是html代码,默认是byte类型
  • response.requests.headers:当前响应的请求头

settings.py中的重点字段和内涵

  • USER_AGENT 设置ua
  • ROBOTSTXT_OBEY 是否遵照robots协议,默认是遵照
  • CONCURRENT_REQUESTS 设置并发请求的数量,默认是16个
  • DOWNLOAD_DELAY 下载延迟,默认无延迟
  • COOKIES_ENABLED 是否开启cookie,即每次请求带上前一次的cookie,默认是开启的
  • DEFAULT_REQUEST_HEADERS 设置默认请求头
  • SPIDER_MIDDLEWARES 爬虫中间件,设置过程和管道相同
  • DOWNLOADER_MIDDLEWARES 下载中间件

 

转载于:https://www.cnblogs.com/Jack666/p/9864972.html