IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python爬虫(二)requests模块 -> 正文阅读

[Python知识库]python爬虫(二)requests模块

爬虫(二)requests模块

  • urllib模块
  • requests模块

01.requests基础

**requests模块:**python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。

作用:模拟浏览器发请求。

  • 使用流程/编码流程
    • 指定url
    • 基于requests模块发起请求
    • 获取响应对象中的数据值
    • 持久化存储

02.实战编码

1.需求:爬取搜狗主页

import requests

if __name__=="__main__":
    #第一步:指定url
    url='https://www.sogou.com/'

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

    #第二步:发出请求
    #get方法会返回一个响应对象
    response=requests.get(url=url,headers=headers)

    #第三步:获取响应数据,
    #text返回的是字符串形式的响应数据
    page_text=response.text

    #第四步:持久化存储
    with open('搜狗.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    print("爬虫完毕")

2、requests 的巩固练习(实战巩固)

2.1、UA伪装

需求:爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)

  • UA检测
  • UA伪装
#UA:User-Agent(请求载体的身份标识)
#UA伪装:门户用站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器
#说明是一个正常请求,反之,不可以请求

import requests
if __name__=="__main__":
    url='https://www.sogou.com/web?' #https://www.sogou.com/web?query=你好李焕英
    #处理url携带的参数:封装到字典中
    world=input('请输入搜索内容')
    param={
        'query':world
    }
    #UA伪装
    headers={
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }

    #对指定的url发起的请求对应的url是携带参数的,并且请求过程中处理了参数
    #url请求过程中动态拼接了param
    response=requests.get(url=url,params=param,headers=headers)

    page=response.text

    kw=world+'.html'
    with open(kw,'w',encoding='utf-8') as fp:
        fp.write(page)
    print("爬虫完毕")

2.2、post请求(携带了参数),响应json数据

需求:破解百度翻译

  • post请求(携带了参数)
  • 响应数据是一组json数据
import requests
import json
if __name__=="__main__":
    #1.指定url
   post_url='https://fanyi.baidu.com/sug'
    #2.UA伪装
   headers = {
       'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
   }
   #post请求参数处理(同get请求一致)
   word=input('请输入一个单词:')
   data={
       'kw':word
   }
    #4.请求发送
   response=requests.post(url=post_url,data=data,headers=headers)
    #5.获取响应数据:json()方法返回的是obj
    #如果确认响应数据是json类型的,才可以使用json()
   page=response.json()
    #持久化存储
   fp=word+'.json'
   filename=open(fp,'w',encoding='utf-8')
   json.dump(page,fp=filename,ensure_ascii=False)



2.3 需求:爬取豆瓣电影分类排行榜

import requests
import json

if __name__=="__main__":
    url='https://movie.douban.com/j/chart/top_list?'
    # 2.UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }

    param={
        'type': '4',
        'interval_id': '100:90',
        'action':'',
        'start': '0',
        'limit': '20',
    }

    response=requests.get(url=url,params=param,headers=headers)
    list=response.json()

    fp=open('xiju.json','w',encoding='utf-8')
    json.dump(list,fp=fp,ensure_ascii=False)
    print('结束')
  • 需求:爬取肯德基餐厅查询
#作业

import requests
import json

if __name__=="__main__":
    url='http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }

    data={
        'cname':'',
        'pid':'',
        'keyword': '郑州',
        'pageIndex': '1',
        'pageSize': '10',
    }

    response=requests.post(url=url,data=data,headers=headers)

    dic=response.text

    with open('kendeji.html','w',encoding='utf-8') as fp:
        fp.write(dic)
    print("结束")

2.4 综合,复杂

  • 需求:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证相关数据,网站(http://scxk.nmpa.gov.cn:81/xk/)

  • 动态加载数据

  • 首页中对应的企业信息数据是通过ajax动态请求到的

    http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=af4832c505b749dea76e22a193f873c6

    http://scxk.nmpa.gov.cn:81/xk/itownet/portal/dzpz.jsp?id=e48046ec68d34d4692abbb6e06373866

只有两个ID值不同

  • 通过对详情页url的观察发现:

    • url的域名都是一样的,只有携带的参数(id)不一样
    • id值可以从首页对应的ajax请求到的json串中获取
    • 域名和id值拼接处一个完整的企业详情页的url
  • 详情页的企业详情数据也是动态加载出来的

    观察后发现:
    -所有的post请求的url都是一样的,只有参数id值是不同

    如果我们可以批量获取多家企业的id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url

import requests
import json

if __name__=="__main__":
    #先批量获取企业的id
    url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
    }
    id_list=[]  #存储企业的id
    all_data_list=[]    #存储所有的企业详情数据

    #参数封装
    for i in range(1,10):
        data={
            'on': 'true',
            'page': i,
            'pageSize': '15',
            'productName':'',
            'conditionType': '1',
            'applyname':'',
            'applysn':'',
        }

        dic=requests.post(url=url,data=data,headers=headers).json()
        for i in dic['list']:
            id_list.append(i['ID'])


    #获取详情页

    post_url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id in id_list:
        data={
            'id': id,
        }

        dic1=requests.post(url=post_url,data=data,headers=headers).json()
        all_data_list.append(dic1)

    fp=open('化妆品.json','w',encoding='utf-8')
    json.dump(all_data_list,fp=fp,ensure_ascii=False)
    print("完成")


  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-15 15:49:40  更:2021-11-15 15:51:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:24:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码