爬虫(一)爬虫入门

如果不知道啥是爬虫 ,传送门--------->五分钟告诉你什么是爬虫

一、为什么学习爬虫

        大数据时代,根据数据分析用户购买意向,从而进行商业相关调整。浏览器中用户能拿到的,原则上爬虫都可以爬到。

关于反爬:资源同等情况下,爬虫胜利。


爬虫与黑客的区别:

  • 爬虫:灰色地带,带账号权限操作,只是一种便利的获取数据。
  • 黑客:违法,免爬取,付费。

 

二、爬虫的分类:

  1. 通用爬虫:搜索引擎和大型web服务提供的爬虫。弊端:冗余多,占容量。不精准。
  2. 聚焦爬虫:针对特定网站的爬虫,定向的获取某方面数据的爬虫。(累积式、增量式、deepweb式)

 

三、爬虫的工作原理

       robots协议:君子协议,把握好爬取的度,哪些可以爬,哪些不能爬。

 

四、编码

爬虫请求回来的数据是bytes类型(二进制)

utf-8 是Unicode的一种实现形式

 

http请求的过程

  1. 浏览器先向地址栏中的url发起请求,并获取相应

  2. 在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应

  3. 浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应

  4. 从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改————这个过程叫做浏览器的渲染

 

五、Python中爬虫库

Requests模块

特点:(vs urllib)

  1.      简单易用
  2.      Python2,Python3一模一样。
  3.     底层库是urllib

安装:

pip install requests

栗子1:

# requests 模块基本使用
def load_baidu_data():
     # 1.url
     url = 'https://www.baidu.com/'

     # 2.发送请求
     response = requests.get(url)
     # text --> str  (优先使用content)
     data = response.text

     # content -->bytes--->str  (优先使用content)
     data2 = reponse.content.decode('utf-8')

     # 3.验证数据
     print(response)
     print(data)

if __name__ == '__main__':
     load_baidu_data()

requests模块属性介绍:

import requests

# requests 属性简介

def load_baidu_data():

    # 1. 目标url
    url = 'http://www.baidu.com/'

    # 2. 发请求
    response = requests.get(url)

    # 3. 状态码
    code = response.status_code

    # 4. 请求头  user-agent 一个反爬点
    request_headers = response.request.headers

    # 5. 响应头
    response_headers = response.headers

    # 6. 请求的cookies
    request_cookies = response.request.cookies  # request._cookie 版本问题

    # 7. 响应的cookies
    response_cookies = response.cookies


    
if __name__ == '__main__':
     load_baidu_data()
import requests
# import random  # 每次随机获取不同浏览器信息

def load_data():

    url = "http://www.baidu.com/"

    use_headers ={   # 高并发的时候,随机更换此浏览器版本
        'User_Agent': xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    }
    #请求的时候 添加user——agent
    response = requests.get(url, headers = use_headers)

    # bytes --->str
    data = response.content.decode()

    request_headers = response.request.headers

    with open('03headers.html','w')as f:
              f.write()

if __name__ == '__main__':
    load_data()

download_image

import requests

 

def download_image():

import requests

# 图片的url
url = 'https://www.baidu.com/img/bd_logo1.png' 

# 响应本身就是一个图片,并且是二进制类型
response = requests.get(url) 

# print(response.content)

# 以二进制+写入的方式打开文件
with open('baidu.png', 'wb') as f: 
    # 写入response.content bytes二进制类型
    f.write(response.content)

传参爬虫

我们在使用百度搜索的时候经常发现url地址中会有一个 ?,那么该问号后边的就是请求参数,又叫做查询字符串

eg: https://www.baidu.com/s?wd=python&a=c

 

请求参数的形式:字典

kw = {'wd':'长城'}

请求参数的用法

requests.get(url,params=kw)

关于参数的注意点

在url地址中, 很多参数是没有用的,比如百度搜索的url地址,其中参数只有一个字段有用,其他的都可以删除 如何确定那些请求参数有用或者没用:挨个尝试! 对应的,在后续的爬虫中,越到很多参数的url地址,都可以尝试删除参数

1.对https://www.baidu.com/s?wd=python发起请求可以使用requests.get(url, params=kw)的方式

2.也可以直接对https://www.baidu.com/s?wd=python完整的url直接发送请求,不使用params参数

 

 

request  post请求

  1. 登录注册( POST 比 GET 更安全)
  2. 需要传输大文本内容的时候( POST 请求对数据长度没有要求)

所以同样的,我们的爬虫也需要在这两个地方回去模拟浏览器发送post请求

  • 用法:

      response = requests.post("http://www.baidu.com/", \
      data = data,headers=headers)
    
  • data 的形式:字典

  • 在模拟登陆等场景,经常需要发送post请求,直接使用requests.post(url,data)即可

Scrat是热爱坚果的松鼠哦~

下一篇:爬虫(二)代理

 

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值