爬虫是什么?爬虫其实就是获取网页的内容经过解析来获得有用数据并将数据存储到数据库中的程序。

基本步骤:

  1.获取网页的内容,通过构造请求给服务器端,让服务器端认为是真正的浏览器在请求,于是返回响应。python有很多请求的库,像urllib,requests库等,个人比较喜欢requests库,很容易上手。

  2.解析获得的数据,可以通过正则表达式,bs4,xpath等解析工具来获得自己想要的数据。

  3.存到数据库,现在最流行的三大数据库,mysql,mongodb,redis都可以通过python相关的库来进行交互。

会话和Cookies?

  什么是会话?什么是Cookies呢?这全都要怪罪于HTTP协议,因为HTTP协议是无状态的协议,因此前后两个请求它并不能够知道是不是同一个用户在发送请求,这就可能会导致重复的传递一些请求。这时候会话和Cookies就帮上大忙了。当用户在执行登录操作后,后端服务器会为该用户创建一个会话,会话中包含一个id来标识这个会话,用户的登录状态以及用户的信息,并且将这一标识id通过Set-Cookie字段返回给客户端,当客户端下一次请求需要登录才能查看的网页时,服务器就会检查客户端发过来的Cookie字段,如果能够通过Cookie字段找到用户相应的会话,就会进一步判断该用户的登录状态。通常网站都会有一个会话超时时间,如果会话过期了,就需要重新登录。

  总结的说,会话是在服务器端存储的信息,而Cookie是在客户端存储的信息,会话的作用就是用来维持用户的登录状态。

代理

  代理的基本原理是什么呢?代理实际上就是指代理服务器,当我们设置了代理服务器的时候,该代理服务器就成为了我们的服务器,而代理服务器本身也成为了客户端去向我们真正请求的服务器发送请求,当代理服务器获得响应后再将响应返回给我们本地的客户端,这样就成功的实现了隐藏我们本地ip的功能。

  为什么要使用代理呢?一些网站在后端处理请求的时候会检测一段时间内同一个ip访问的次数,如果次数达到了一定的值,就会直接拒绝服务,也就是经常说的ip被封了。为了防止这种情况的发生,就需要强大的代理功能来隐藏我们的ip。在使用爬虫爬去数据的时候,如果我们能够不断的更换代理,就会让服务器迷失自己~

  常见的代理设置:使用网上的免费代理或者使用付费的代理服务。

  

Python爬虫学习二------爬虫基本原理的更多相关文章

  1. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  2. python库学习笔记——爬虫常用的BeautifulSoup的介绍

    1. 开启Beautiful Soup 之旅 在这里先分享官方文档链接,不过内容是有些多,也不够条理,在此本文章做一下整理方便大家参考. 官方文档 2. 创建 Beautiful Soup 对象 首先 ...

  3. Python爬虫学习(二) ——————爬取前程无忧招聘信息并写入excel

    作为一名Pythoner,相信大家对Python的就业前景或多或少会有一些关注.索性我们就写一个爬虫去获取一些我们需要的信息,今天我们要爬取的是前程无忧!说干就干!进入到前程无忧的官网,输入关键字&q ...

  4. python爬虫学习(二):定向爬虫例子-->使用BeautifulSoup爬取"软科中国最好大学排名-生源质量排名2018",并把结果写进txt文件

    在正式爬取之前,先做一个试验,看一下爬取的数据对象的类型是如何转换为列表的: 写一个html文档: x.html<html><head><title>This is ...

  5. Python 3 Anaconda 下爬虫学习与爬虫实践 (1)

    环境python 3 anaconda pip 以及各种库 1.requests库的使用 主要是如何获得一个网页信息 重点是 r=requests.get("https://www.goog ...

  6. Python爬虫学习——1.爬虫入门

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...

  7. Python 3 Anaconda 下爬虫学习与爬虫实践 (2)

    下面研究如何让<html>内容更加“友好”的显示 之前略微接触的prettify能为显示增加换行符,提高可阅读性,用法如下: import requests from bs4 import ...

  8. day47-python爬虫学习二

    2.Request的会话对象 s = requests.session() Python2 S = requests.Session() 所有一次会话的信息都保存在s中,只需要对s进行操作就可以了. ...

  9. python多线程学习二

    本文希望达到的目标: 多线程同步原语:互斥锁 多线程队列queue 线程池threadpool 一.多线程同步原语:互斥锁 在多线程代码中,总有一些特定的函数或者代码块不应该被多个线程同时执行,通常包 ...

随机推荐

  1. 牛客编程巅峰赛S1第3场 - 青铜&白银 A.位数求和

    题意:求所有\(n\)位数每位之和等于\(m\)的数的和. 题解:数据范围非常小,我们可以直接暴力枚举\(t\)到\(10*t\)的所有数字,逐位分解判断即可. 代码: class Solution ...

  2. Kubernets二进制安装(15)之安装部署coredns

    在运维主机上(mfyxw50.mfyxw.com)准备Coredns镜像文件,以docker镜像文件的方式部署到Kubernetes集群中去. 1.下载coredns镜像 [root@mfyxw50 ...

  3. python函数传参

    之前一直没有注意过该问题,在leetcode144中写递归发现该问题,不知道递归函数传参是指针还是引用. 参考:http://c.biancheng.net/view/2258.html 如果是不可变 ...

  4. 线程池原理讲解——ThreadPoolExecutor

    [这是前几天的存货,留着没发表,今天又复习一遍,润化了部分内容,继续干] 说线程池前,先简单回顾一下线程的状态吧: 1.线程状态转换 线程的五种状态,及其转换关系: 2.线程创建方式 三种:两个接口一 ...

  5. codeforces 1045I Palindrome Pairs 【stl+构造】

    题目:戳这里 题意:给1e5个字符串,问有多少对字符串组合,满足最多只有一种字符有奇数个. 解题思路:每种情况用map存一下就行了.感觉这题自己的代码思路比较清晰,所以写个题解记录一下 附ac代码: ...

  6. PAT l2-010 排座位 【并查集】

    L2-010. 排座位 时间限制 150 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位. ...

  7. sdut2878 环形依赖的DP(高斯消元,剪枝后的模板

    这题的状态是循环依赖的有环.. 之前一道概率DP,类似有环..但是它是可以消掉的 比如dp[i]=0.3*dp[i+1]+0.2*dp[i+2]+0.5*dp[i]; 完全可以变成,0.5*dp[i] ...

  8. Linux内核实现透视---硬中断

    Linux的中断处理是驱动中比较重要的一部分内容,要清楚具体的实现才能更好的理解而不是靠记住别人理解后总结的规律,所以今天就打算从从源码来学习一下Linux内核对于中断处理过程,设计中断子系统的初始化 ...

  9. Redis in Action : Redis 实战学习笔记

    1 1 1 Redis in Action : Redis  实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...

  10. Chrome V8 引擎源码剖析

    Chrome V8 引擎源码剖析 V8 https://github.com/v8/v8 array & sort https://github.com/v8/v8/search?l=Java ...