pyhotn爬虫篇---基础了解

一 .爬虫css

  爬虫,向网站发送请求,获取资源后分析 并提取有用的数据 的程序html

爬虫本质就是:本质就是cosplay,将爬虫模拟成各类【USER_AGENT】浏览器,甚至还模拟成别人【ip代理】的浏览器。自动提取网页的程序。python

 

二.流程web

 

#一、发起请求
使用http库向目标站点发起请求,即发送一个Request
Request包含:请求头、请求体等

#二、获取响应内容
若是服务器能正常响应,则会获得一个Response
Response包含:html,json,图片,视频等

#三、解析内容
解析html数据:正则表达式,第三方解析库如Beautifulsoup,pyquery等
解析json数据:json模块
解析二进制数据:以b的方式写入文件

#四、保存数据
数据库
文件

 

 

三 请求与响应

#Request:用户将本身的信息经过浏览器(socket client)发送给服务器(socket server)

#Response:服务器接收请求,分析用户发来的请求信息,而后返回数据(返回的数据中可能包含其余连接,如:图片,js,css等)

#ps:浏览器在接收Response后,会解析其内容来显示给用户,而爬虫程序在模拟浏览器发送请求而后接收Response后,是要提取其中的有用数据。

 

四 request

#一、请求方式:
    经常使用的请求方式:GET,POST
    其余请求方式:HEAD,PUT,DELETE,OPTHONS

    ps:用浏览器演示get与post的区别,(用登陆演示post)

    post与get请求最终都会拼接成这种形式:k1=xxx&k2=yyy&k4=zzz
    post请求的参数放在请求体内:
        可用浏览器查看,存放于form data内
    get请求的参数直接放在url后

#二、请求url
    url全称统一资源定位符,如一个网页文档,一张图片
    一个视频等均可以用url惟一来肯定

    url编码
    https://www.baidu.com/s?wd=图片
    图片会被编码(看示例代码)


    网页的加载过程是:
    加载一个网页,一般都是先加载document文档,
    在解析document文档的时候,遇到连接,则针对超连接发起下载图片的请求

#三、请求头
    User-agent:请求头中若是没有user-agent客户端配置,
    服务端可能将你当作一个非法用户
    host
    cookies:cookie用来保存登陆信息

    通常作爬虫都会加上请求头


#四、请求体
    若是是get方式,请求体没有内容
    若是是post方式,请求体是format data

    ps:
    一、登陆窗口,文件上传等,信息都会被附加到请求体内
    二、登陆,输入错误的用户名密码,而后提交,就能够看到post,正确登陆后页面一般会跳转,没法捕捉到post 
from urllib.parse import urlencode
import requests

headers={
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    'Cookie':'BIDUPSID=A477AA56C3F17BC59A75C1EC2457CE9D; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; BAIDUID=AD7BBA497F7F14FB30E8AA7E2BBAD53C:FG=1; PSTM=1510744992; BD_HOME=0; H_PS_PSSID=1420_21096_24880_20927; BD_UPN=12314753',
    'Host':'www.baidu.com',
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3253.3 Safari/537.36'

}

# response=requests.get('https://www.baidu.com/s?'+urlencode({'wd':'啤酒'}),headers=headers)
response = requests.get('https://www.baidu.com/s',params={'wd':'啤酒'},headers=headers)

with open('e.html','w',encoding='utf8') as f:
    f.write(response.text)
    
# print(response.text)
示例

 

五 response正则表达式

#一、响应状态
    200:表明成功
    301:表明跳转
    404:文件不存在
    403:权限
    502:服务器错误

#二、respone header
    set-cookie:可能有多个,是来告诉浏览器,把cookie保存下来
    
#三、preview就是网页源代码
    最主要的部分,包含了请求资源的内容
    如网页html,图片
    二进制数据等

 

六.总结数据库

#一、总结爬虫流程:
    爬取--->解析--->存储

#二、爬虫所需工具:
    请求库:requests,selenium
    解析库:正则,beautifulsoup,pyquery
    存储库:文件,MySQL,Mongodb,Redis

#三、爬虫经常使用框架:
    scrapy

 

2.HTTP概述

HTTPhypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通讯的规则。json

HTTP就是一个通讯规则,通讯规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实咱们要学习的就是这个两个格式!客户端发送给服务器的格式叫请求协议;服务器发送给客户端的格式叫响应协议浏览器

特色:缓存

  • HTTP叫超文本传输协议,基于请求/响应模式的!
  • HTTP是无状态协议

URL:统一资源定位符,就是一个网址:协议名://域名:端口/路径,例如:http://www.baidu.com服务器

 

  爬虫爬取数据时必需要有一个目标的URL才能够获取数据,所以,它是爬虫获取数据的基本依据,准确理解它的含义对爬虫学习有很大帮助。

 

 

3.状态

响应头对浏览器来讲很重要,它说明了响应的真正含义。例如200表示响应成功了,302表示重定向,这说明浏览器须要再发一个新的请求。

  • 200:请求成功,浏览器会把响应体内容(一般是html)显示在浏览器中;
  • 404:请求的资源没有找到,说明客户端错误的请求了不存在的资源;
  • 500:请求资源找到了,但服务器内部出现了错误;
  • 302:重定向,当响应码为302时,表示服务器要求浏览器从新再发一个请求,服务器会发送一个响应头Location,它指定了新请求的URL地址;
  • 304
当用户第一次请求index.html时,服务器会添加一个名为Last-Modified响应头,这个头说明了
  index.html的最后修改时间,浏览器会把index.html内容,以及最后响应时间缓存下来。当用户第
  二次请求index.html时,在请求中包含一个名为If-Modified-Since请求头,它的值就是第一次请
  求时服务器经过Last-Modified响应头发送给浏览器的值,即index.html最后的修改时间,
  If-Modified-Since请求头就是在告诉服务器,我这里浏览器缓存的index.html最后修改时间是这个,
  您看看如今的index.html最后修改时间是否是这个,若是仍是,那么您就不用再响应这个index.html
  内容了,我会把缓存的内容直接显示出来。而服务器端会获取If-Modified-Since值,与index.html
  的当前最后修改时间比对,若是相同,服务器会发响应码304,表示index.html与浏览器上次缓存的相
  同,无需再次发送,浏览器能够显示本身的缓存页面,若是比对不一样,那么说明index.html已经作了修
  改,服务器会响应200。

 

 

 

4.浏览网页

  浏览网页的过程,用户输入网址以后,通过DNS服务器,找到服务器主机,向服务器发出一个请求,服务器通过解析,发动给用户的浏览器HTML、JS、CSS 等文件,浏览器解析出来,用户即可以看到形形色色的内容。

  所以,用户看到到的网页实质是由HTML代码构成的,爬虫爬的即是这些内容,通过分析和过滤这些HTML代码,实现对图片,文字等资源的获取。

相关文章
相关标签/搜索