python爬虫第一天

第一天:前端

爬虫概要:python

为何咱们要学习爬虫?web

首先请问:都说如今是‘大数据时代’,那数据从何而来?浏览器

  1. 企业产生的用户数据:百度指数,阿里指数,新浪微博指数。
  2. 数据平台购买数据:数据堂,国云数据市场,贵阳大数据交易所。
  3. 政府/机构购买数据:中华人民共和国国家统计局,纳斯达克。
  4. 爬取网络数据:本身动手丰衣足食。

 

 

 

 

 

 

什么是大数据:安全

多大的数据才算大数据?服务器

B: bytes(字节)微信

K:1K = 1024B 1K=2**10网络

M:1M = 1024K 1M=2**20session

G:1G = 1024M 1G=2**30多线程

4G=2**32

T:1T = 1024G 1T = 2**40

P:1P = 1024T 1P=2**50

E:1E = 1024P 1E=2**60

所谓的大数据在100T-10P之间。

 

 

 

 

 

 

爬虫的定义:

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

只要是浏览器能作的,原则上,爬虫都能作

网络爬虫的更多用途:

12306抢票

网站上的投票

短信轰炸—》找到不少注册网站添加对应的手机号,发送验证码,就能实现短信轰炸。(往后你惹出祸来,不把师傅说出来就好了)

 

举例12306—》携程

微信—》搜狗微信

两个阵营的斗争

爬虫——反爬虫——反反爬虫

 

爬虫与反爬虫的斗争

反爬虫:验证码、流量监控(封IP、封session、封userAgent)

反反爬虫:验证码图像识别、代理、随机userAgent、……

 

爬虫与反爬虫的斗争最后胜利的一方永远是爬虫

 

注意:搜索引擎也是爬虫。反爬虫总不可能去反搜索引擎吧

 

为何用python作爬虫?

PHP:PHP是作后台的,小型网站。爬虫是在前端运行的。确定是不合适。

Java:Java既能够作后台,也能够作爬虫。可是Java比较臃肿,修改Java代码比较耗人力

C/C++:C/C++是作嵌入式的。若是让搞嵌入式的人作爬虫有点大材小用了,资源浪费

Python:轻量级。快速更新迭代。代码易读。有不少已成型的库,直接import就能够了。支持多线程

 

 

爬虫的分类

1通用爬虫:一般指搜索引擎的爬虫

2.聚焦爬虫:针对特定网站的爬虫

 

通用搜索引擎工做原理

想想:若是咱们本身实现一个和百度同样的网站须要怎么作?

 

通用爬虫和聚焦爬虫工做流程

搜索引擎流程:抓取网页à数据存储à预处理à提供检索服务,网站排名

聚焦爬虫流程:

为何要从响应内容提取url?(拿翻页举例)

通用搜索引擎的局限性

  1. 通用搜索引擎所返回的网页里90%的内容无用。
  2. 不一样用户搜索的目的不彻底相同,可是返回内容相同。

 

Robots协议

网站经过robots协议告诉搜索引擎哪些页面能够抓取,哪些页面不能抓取。

例如:https://www.taobao.com/robots.txt

 

复习HTTP HTTPS

http协议(超文本传输协议):是一种发布和接收HTML页面的方法。

https:简单来说是http的安全版,在http下加入SSL层。

SSL(安全套接字层)主要用于web的安全传输协议,在传输层对网络链接进行加密,保障在internet上数据传输的安全。

http默认的端口:80

HTTPS默认的端口:443

https比http更安全,可是性能更低(多了加解密的过程)

 

url的形式

形式 scheme://host[port]/path…/[?query-string][anchor]

scheme:协议(例如:http,https,ftp)

host:服务器的IP地址或者域名

port:服务器的端口号

path:访问资源的路径

query-string:参数

anchor:锚

 

http常见请求头

host(主机和端口号)

connection(链接类型)

Upgrade-Insecure-Requests (升级为HTTPS请求)

User-Agent (浏览器名称)

Accept (传输文件类型)

Referer (页面跳转处)

Accept-Encoding(文件编解码格式)

Cookie (保存用户的我的信息)

x-requested-with :XMLHttpRequest  (是Ajax 异步请求)

 

常见的请求方法

GET

POST

二者有什么区别呢?

POST请求更安全,适用于表单,提交数据量很大的时候。

常见响应状态码(status code)

200:成功

302:临时转移至新的url

307:临时转移至新的url

404:not found

500:服务器内部错误

 

Requests使用入门

问题:为何学习requests,而不是utllib?

  1. requests的底层实现就是urllib
  2. requests在Python2和python3中通用,方法彻底同样
  3. 简单易用
  4. requests可以自动帮助咱们解压(gzip压缩的等)网页内容

发送简单的请求

需求:经过requests向百度首页发送请求,获取百度首页的数据

response = requests.get(url)

response的经常使用方法:

  1. response.text(返回的是Unicode格式的数据)
  2. response.content(返回的是字节流数据)
  3. response.status_code(查看响应码)
  4. response.request.headers(请求头)
  5. response.headers(响应头)

import requests

# 发送请求
r = requests.get('https://www.baidu.com/img/bd_logo1.png')

# 保存
# wb以二进制的方式写入
with open("a.png", 'wb') as f:
    f.write(r.content)

print(r.request.headers)

 

发送带header的请求

为何请求须要带上header?

模拟浏览器、欺骗服务器、获取和浏览器一致的内容

header的形式:字典

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

用法:requests.get(url,headers=headers)

 

发送带参数的请求

什么叫作请求参数:

参数的形式:字典

kw = {‘wd’:’欧冠’}

用法:requests.get(url,params=kw)

相关文章
相关标签/搜索