爬虫的基础知识

第一课:爬虫概念、工具和HTTP

1.什么是爬虫

·爬虫就是根数客户运(测宽格)发送网络请求,获取响应,按照规则提取数据的程序

·模以客户课(测宽档)发送网络请求:照看浏览器发送一模一样的请求,获取和湖览器一模一样的数据

2.爬虫的数据去哪了

·呈现出来:展示在网页上,或者是展示在app上

·进行分析:从数据中寻找一些规律,比如我们可以利用百度指数来进行相关结果的分析

3.需要的软件和环境

·python3

。黑马python基础班15天视屏:http://yun.itheima.com/course/214.html

。基础语法(字符串,列表,字典,判断和循环)

。函数(函数的创建和调用)

。面向对象(如何创建一个类,如何使用这个类)

·pycham

。python编辑器

Pycharm与jupyter book之间的区别在于:

jupyter book没有自动补齐等功能。

·chrome浏览器

。分析网络请求用的

4.浏览器的请求

·url

。在chrome中点击检查,点到network,重新刷新后就会显示出来,

。url=请求的协议+网站的域名+资源的路径+参数

 

以搜索“船只”为例,搜索后获得的url如下所示:

https(请求的协议)://www.baidu.com(网站的域名)/s(资源的路径)?wd=%E8%88%B9%E5%8F%AA&rsv_spt=1&rsv_iqid=0xdfd52ecb000256f4&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=13&rsv_sug1=17&rsv_sug7=100&rsv_sug2=0&inputT=3457&rsv_sug4=3458(参数)。

将上述url中的参数部分放在解码工具中进行解码即可得到:

wd=船只&rsv_spt=1&rsv_iqid=0xdfd52ecb000256f4&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=13&rsv_sug1=17&rsv_sug7=100&rsv_sug2=0&inputT=3457&rsv_sug4=3458,即%E8%88%B9%E5%8F%AA&rsv_spt=1被解码成汉字“船只”

  • ·测览器请求ur地址
  • 当前url对应的响应+js+cs8+图片-》elements中的内容
  • 爬虫请求url地址
  • 当前url对应的响应
  • elements的内容和爬虫获取到的urt地址的响应不同,爬虫中需要以当前un地址对应的响应为准提取数据
  • 当前urt地址对应的响应在哪里
  • 从netwwork中找到当前的uri地址,点击response
  • 在页面上右键显示网页源码

url=请求的协议(http或者https)+网站的域名+资源的路径+参数;

浏览器请求的url地址:当前ulr对应的响应+js+css+图片——elements的内容

爬虫请求的url地址:只有当前ulr对应的响应

elemens的内容和爬虫获取到的url地址的响应不同,爬虫中需要以当前url地址对应的响应为准提取数据,

当前url地址对应的响应为准提取数据:从network找到当前的url地址,点击response;

或者在页面上右击点击显示网页源码,但是对于网页页面更新非常快的网页,这两个地方的内容可能会出现不一样。

5.HTTP 和HTTPS

http:超文本传输协议,客户端和服务端之间约定了一个协议,以明文形式传输,效率更高,但是不安全,

https:https=http+ssl(安全套接字层),在每次传输数据之前数据先加密,然后到服务器后再解密,效率地,安全。

http协议之请求:

headers:

请求方法:geting求和post请求方法

cookie:

请求体:get请求没有请求体,post请求有请求体。

get请求和post请求之间的区别:

get请求没有请求体,post有,get请求把数据放到url地址中

post请求常用于登陆注册

post请求携带的数据量比get请求大、多,常用于大文本的传输

HTTP协议之响应:

1.请求行

·2.请求头

·User-Agont用户代理:对方服务器能够通过user_agent知道当前请求对方资源的是什么浏览器

·如果我们需要模拟手机版的浏览器发送请求,对应的就需要把user_agent改成手机版

·Cookie:用来存储周户信息,每次请求会被携得上发送给对方的浏览器

·要获取登最后才能访问的页面

·对方的服务器会通过Cookie来判新是我们是一个爬虫

3.请求体

·携带数据

·get请求没有请求体

·post请求有请求体

·HTTP协议之响应

。1.响应头

·Set-Cookie:对方服务器通过该字段设置cooke到本地

。2.响应体

·地址对应的响应

5.requests模块的学习

使用前

·pipinstal requests

发送get,post请求,获取响应

·response= requests.get(url),发送get请求,请求url地址对应的响应

·response= reqeusts.post(url,data={请求体的字典})发送post请求,请求url地址对应的响应

6.response的方法

·response.text

。该方式往往会出规乱码,出现乱码使用response.encoding='utf-8'

·response.content.decode(),注意这里decode中默认的是utf-8类型的字符,所以不用写成decode(utf-8)

。把响应的二进制字节流转化为str类型

response.requests.url ,发送请求的url地址

response.url ,response响应的url地址

response.requests.headers ,请求头

response.headers ,响应头

7.获取网页源码的正确打开方式(通过下面三种方式一定可以获取网页的源码字符串)

·1.response.content.decode()

·2.response.content.decode('gbk')

·3.response.text,注意response.text是指requests模块通过对请求头的分析来猜出来的网页源码,但是由于网页源码都很规范,所以一般都能够猜对。

8.发送带header的请求(为了模拟浏览器获取和浏览器一模一样的内容)

Headers={

'User-Agent': 'Mozilla/5.0(iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, likeGecko) Version/11.0 Mobile/15A372 Safari/604.1

'}

注意由于爬虫是伪装成浏览器去完成获取对方服务器的某些信息,但是爬虫始终不是浏览器,因此很容易被对方的服务器识破,因此为了模拟的更为真实,不仅需要加上url,还需要加上User-Agent,如果不够还要加上Referer、甚至是cookie等信息,直至成功为止;但是大部分情况下带上User-Agent就可以)

Response=requests.get(url,headers=headers)

9.使用超时参数

requests.get(url,headers=headers,timeout=3)#3秒内必须返回响应,否则会报错,为了减少网络波动的影响就需要retrying模块。

10.retrying模块的学习

pipinstall retrying

from retrying importretry

@retry(stop_max_attempt_numbers=3)

def func():

print("this is funcl")

raiseValueError("this is test error")

11.处理cookie相关的请求

·人人网{'email:"mr_mao-hacker@163.com","password":"alarmchime}

·直接携带cookie请求url地址

。1.cookie放在headers中

headers={"user-Agent":...…",“Cookie":"cookie字符串“}

。2.cookie字典传给cookies参数

·requests.get(url,cookies=cookie_dict)

·先发送post请求,获取cookle,带上cookie请求登录后的页面

。1.seesion=requests.session()#session具有的方法和requests一样

。2.session.post(url,data,headers)#服务器设置在本地的cookie会保存在session中

。3.session.get(url)#会带上之前保存在session中的cookie,能够请求成功

 

使用超时参数

处理cookie相关的请求

第二课程

数据提取方法

json

·数据交换格式,看起来像python类型(列表,字)的字符串

·使用ison之前需要导入·

.哪里会返回json的数据

。流程器切换到手机版

。抓包app

·json.loads

。把json字符串转化为python类型,把json类型转化为字典

。json.loads(json字特串)

·json.dumps

。把python类型转化为json字符串,把字典类型转换为json,一般字典类型的文件无法写入本地,此时就需要先将字典类型的文件转换为json然后再写入本地

。json.dumps({})

。json.dumps(ret1,.enaureascli=False,indent=2)

·ensure ascl:让中文显示成中文

·indent:能够让下一行在上一行的基础上空格

·豆瓣电视爬虫案例

注意在写爬虫的时候尽量将谷歌浏览器切换到手机模式,因为在手机模式下更容易出现json类型

技巧:在切换到手机模式下的时候可以直接先打开百度搜索页面,然后就切换到手机模式,此时就会出现手机浏览器上常见的浏览模式。

xpath和lxml

·xpath

。一门从html中提取数据的语言

·xpath语法

。xpathhelper插件:帮助我们从elcnents中定位数据

。1.选择节点(标签)

·/html/head/head:能够选中html下的head下的所有的meta标签

。2.//:您够从任意节点开始选择

·//li:当前页面上的所有的li标签

·/html/head//linkhead下的所有的link标签

。3.@符号的用途

·选择具体某个元素://div[class='feed']/ul/1i

·选择class=feed'的div下的ul下的li

·a/@href:选择a的href的值

。4.获取文本:

·/a/text():获取a下的文本

·/a//text():获取a下的所有的文本

。5.点前

·"/a"当前节点下的a标签

·lxml

。安装:pip installlxml

。使用

 

posted @ 2019-11-14 19:40  舒畅123  阅读(407)  评论(0)    收藏  举报