初识爬虫requests模块使用步骤

爬虫相关介绍
  • 什么是爬虫

    • 就是编写程序,模拟浏览器上网,让其去互联网中抓取数据的过程

      • 模拟:

        • 浏览器本身就是一个纯天然的爬虫工具,爬虫相关的模块都是基于浏览器为基础开发出来的。

      • 抓取:

        • 抓取网页数据分两种情况:

          • 将一个页面所有的数据抓取到

          • 将页面中局部的数据抓取到

  • 爬虫在应用场景的分类
    • 通用爬虫:
      • 将一个页面中所有的数据获取。

      • 大部分的搜索引擎中应用比较多。

    • 聚焦爬虫
      • 将页面中局部的指定的数据进行提取/抓取

      • 注意:聚焦爬虫一定是建立在通用爬虫的基础之上实现。

    • 功能爬虫
      • 通过浏览器或者app自动化的操作,实现相关的网页或者app自动化的操作。代替人工在网页或者手机软件中自动执行相关的行为动作。

      • 批量点赞,批量评论,刷单,秒杀.....

    • 增量式爬虫
      • 用来监测网站数据更新的情况。以便爬取网站最新更新出来的数据!

    • 分布式爬虫
      • 可以对网站所有的资源使用分布式机群进行分布和联合的数据爬取

  • 爬虫的矛与盾
    • 反爬机制:对应门户网站,网站可以指定相关的机制阻止爬虫对其网站数据的采集

    • 反反爬策略:对应爬虫程序,爬虫可以制定相关的策略将网站的反爬机制破解,从而爬取到指定的数据

  • 君子协议robots
    • Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots ExclusionProtocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取.

requests基础操作
  • 基本介绍
    • requests就是爬虫中一个基于网络请求的模块。

    • 作用:模拟浏览器上网的。

    • urllib模块就是一个老版的requests模块,现在没人用urllib,而且操作复杂

  • 环境安装
    • pip install requests

    • conda install requests 

  • 基本流程
    • 指定url

    • 发起请求

    • 获取响应数据

    • 持久化存储

  • 案例实战
    • 百度首页数据采集1
    • import requests
      from fake_useragent import UserAgent
      ua=UserAgent()
      params={"User-Agent": ua.chrome}
      
      # 1,指定url
      url = 'https://www.baidu.com/'
      
      # 2,发起请求(只要在浏览器地址栏输入网址按下回车,发起的一定get请求)
      # url为get方法的第一个参数,表示根据指定的url发起get请求
      # get方法会返回一个响应对象
      response = requests.get(url=url,headers=params)  # get使用来使用requests模块发起get请求
      # print("相应数据编码为:",response.encoding)
      print("响应数据cookie为",response.cookies)
      print(response.cookies.get_dict())
      print(type(response.cookies))
      print("url为",response.url)
      print("请求方式为",response.request)
      print("响应表头为:",response.headers)
      print("当前编码为",response.apparent_encoding)
      
      
      # 3.获取响应数据/爬取到的数据
      page_text = response.text  # text属性使用来返回字符串形式的响应数据
      print(page_text)
      
      # 4.持久化存储
      with open('./sogou.html', 'w',encoding='utf-8') as fp:
          fp.write(page_text)
      print('数据爬取存储成功!')
      
      简易的网页采集器2
    • 注意:在浏览器的地址栏中网址,网址?后面的内容就是请求的参数(请求参数)query=jay就是请求的参数

      • 请求参数就是客户端发送给服务端的数据

import requests
from fake_useragent import UserAgent


# 请求参数动态化
keyword = input('请输入关键字:')
# 稍后想要把该字典作为请求参数
pram = {
    'query': keyword,  # 只存在一个键值对(存在一组请求参数)
}
# 1.指定url
url = 'https://www.sogou.com/web'  # 需要将请求参数去除
# 2.发起请求
ua = UserAgent()
headers = {"User-Agent": ua.chrome}
# 通过headers参数进行了头信息的伪装
response = requests.get(url=url, params=pram, headers=headers)

# 3.获取响应数据
page_text = response.text

# 4.持久化存储
fileName = keyword + '.html'
with open(fileName, 'w+',encoding='utf-8') as fp:
    fp.write(page_text)
豆瓣电影数据采集3
  • 豆瓣电影分类排行榜 - 爱情片

    • 爬取电影的详情数据

  • import requests
    from fake_useragent import UserAgent
    
    ua = UserAgent()
    headers = {"User-Agent": ua.chrome}
    
    pram = {
        "type": "13",
        "interval_id": "100:90",
        "action": "",
        "start": "0",
        "limit": "50",
    }
    url = 'https://movie.douban.com/j/chart/top_list'
    response = requests.get(url=url, headers=headers, params=pram)
    # 获取响应数据
    # json()可以将获取到的json格式的字符串进行反序列化
    # 字符串反序列化
    page_text = response.json()
    fp = open('./douban.txt', 'w',encoding='utf-8')
    for dic in page_text:
        title = dic['title']
        score = dic['score']
        fp.write(title + ':' + score + '\n')
        print(title, '爬虫保存成功!')
    

  • 肯德基门店数据爬取4
  • 地址栏没有变

    • 肯德基官方网站 - Welcome to KFC.com.cn

      • 将餐厅的位置信息进行数据爬取

    • 
      # post 请求是 表单数据
      # 查询字符串参数是get
      
      import requests
      
      head = {  # 存放需要伪装的头信息
          'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
      }
      # post请求的请求参数
      data = {
          "cname": "",
          "pid": "",
          "keyword": "天津",
          "pageIndex": "1",
          "pageSize": "10",
      }
      # 在抓包工具中:Form Data存放的是post请求的请求参数,而Query String中存放的是get请求的请求参数
      url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
      # 在post请求中,处理请求参数的是data这个参数不是params
      response = requests.post(url=url, headers=head, data=data)
      # 将响应数据进行反序列化
      page_text = response.json()
      for dic in page_text['Table1']:
          name = dic['storeName']
          addr = dic['addressDetail']
          print(name, addr)
      

  • 总结:
  • 分析该网站的反爬机制:

    • 从爬取到的内容中提取到了一个关键信息:网站检测到了异常的访问请求

      • 异常的访问请求:通过程序发起的请求

      • 正常访问请求:通过浏览器发起的请求

    • 网站如何可以监测请求是不是通过浏览器发起的呢?

      • user-agent

      • cookie数据验证

      • 防盗链

你可能感兴趣的:(网络爬虫,python,网络爬虫,爬山算法)