• requests 模块


    爬虫

    概念:编写程序模拟浏览器上网,让其去互联网上获取数据的过程

    • 通用爬虫:一整张页面
    • 聚焦爬虫:页面中局部的内容

    反爬机制:对应的载体是门户网站

    反反爬策略:对应的载体是爬虫程序

    robots 协议:“防君子不防小人”

    User-Agent:请求载体的身份标识

    requests 模块

    requests 模块代码编写的流程

    • 指定 URL
    • 发起请求
    • 获取响应对象中的数据
    • 持久化存储
    import requests
    
    # 指定URL
    url = 'https://www.sogou.com/'
    
    # 发起请求
    response = requests.get(url=url)
    
    # 获取响应对象中的数据
    page_text = response.text		# response.text是字符串
    
    # 持久化存储
    with open('./sougou.html', 'w', encoding='utf-8') as fp:
        fp.write(page_text)
    

    需求:爬取搜狗指定词条搜索后的页面数据

    需求:爬取百度翻译结果(百度翻译是一个局部的页面刷新,因此发起的是一个基于 ajax 的异步请求)

    response.text :返回字符串格式

    response.content :返回二进制格式

    response.json() :返回 json 格式(要保证返回是 json 数据才能调用该方法)

    爬取豆瓣电影分类排行榜(https://movie.douban.com/)中电影的详情数据

    豆瓣电影在鼠标滚轮下滑时会自动刷新更多的电影,也是局部页面的 ajax 请求

    爬取肯德基餐厅查询(http://www.kfc.com.cn/kfccda/index.aspx)中指定地点的餐厅数据

    爬取国家药品监督管理总局中基于中国化妆品生产许可证相关数据(http://125.35.6.84:81/xk/)

    每家公司都是一个跳转页面,因此要拿到这些跳转的 a 标签,因为要获取的是点击 a 标签中的详细信息。点击翻页时 URL 并没有变化,因此是 ajax 请求,但是在获取到响应对象的数据时,数据中并没有 a 标签。但是这些数据中有 ID

    当点进这些 a 标签进入详情页时,该页的 URL 也并不能获取到详细信息,因此这些详细信息是动态加载出来的,目前所掌握的动态加载只有 ajax,在 Response 中就是该企业的详情信息,发现该 URL 携带的参数是一个 ID,也就是上面所获取的 ID,可以使用循环获取每一个 ID

    '''
    循环产生字典作为请求的参数,使用 requests 发的是 post 请求
    会用到第三个参数 headers,这个参数涉及到 User-Agent,它是请求载体的身份标识
    也就是说使用浏览器发请求和使用 requests 发请求,对应的请求载体不同,即身份标识不同
    大部分的网站都会检测对应请求的身份标识,正常用户访问都会通过浏览器发起请求
    这里使用的是爬虫程序,它发的载体就不是基于某一款浏览器
    如果使用 requests 发请求,服务器端是可以检测对应请求的身份标识,可能就拿不到想要的数据
    
    反爬机制:UA(User-Agent)检测 ---->  UA 伪装
    
    可以对当前使用 requests 发的请求载体进行伪装成基于某一浏览器的
    
    这里的 headers 就是请求头信息
    '''
    
    import requests
    
    url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36"
    }
    id_list = []
    
    for page in range(1, 11):
        data = {
            "on": "true",
            "page": str(page),
            "pageSize": "15",
            "productName": "",
            "conditionType": "1",
            "applyname": "",
            "applysn": "",
        }
        json_data = requests.post(url=url, data=data, headers=headers).json()
        for dic in json_data['list']:
            id = dic['ID']
            id_list.append(id)
    
    detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id in id_list:
        detail_data = {
            "id": id
        }
        detail_json = requests.post(url=detail_url, data=detail_data, headers=headers).json()
        print(detail_json)
    
    

    图片爬取

  • 相关阅读:
    安卓7.0手机拍照闪退问题解决
    自定义字体TextView
    Android Studio中的CmakeList NDK配置
    动态规划之最长公共子序列(LCS)
    快速排序
    KMP算法实现
    数据结构中的栈
    双向链式线性表(模板实现)
    Android Studio配置OpenCV(非NDK)
    AndroidStudio 1.4配置NDK
  • 原文地址:https://www.cnblogs.com/qiuxirufeng/p/11224032.html
Copyright © 2020-2023  润新知