zoukankan      html  css  js  c++  java
  • 爬虫

    一 . 爬虫的基本信息

      概念:

    爬虫:通过编写程序模拟浏览器上网,然后让其去互联网上爬取/获取数据的过程

      分类:

    -- 分类(使用场景)(主要下面三种其他分类不用看)
        -通用爬虫(爬取一整张页面数据,'抓取系统')
        -聚焦爬虫(爬取页面中指定内容,前提是爬取一整张数据)
        -增量式数据(用来 检测 网站数据更新情况,只爬取网站最新更新的数据)

      机制:

    反爬机制(网站制定了相关的手段或者策略阻止爬虫程序进行网页数据的抓取)
    反反爬策略(爬虫破解网站指定的反爬策略)
    
    --反爬机制
        -robots协议:
            -防君子不防小人(你要遵守就有用,不遵守协议可以爬)

      模块:

    requests
        -环境安装 pip install requests
        -作用:模拟浏览器发请求
        -编码流程:1.指定url
                 2.发起请求
                 3.获取响应数据
                 4.持久化存储

    二 . 示例

      先来一个简简单单的小例子

    # 爬取搜狗首页数据,按照编码流程写
    import requests
    
    # 1.获取url
    url = "https://www.sogou.com/"
    
    # 2,发起请求,get方法的返回值就是一个相应对象
    response = requests.get(url=url, verify=False)  # 有的不用写verify
    
    # 3,获取响应数据,text是字符串形式的相应数据
    page_text = response.text
    # print(page_text)
    
    # 4,持久化存储(应该存到数据库中,)
    with open('./sogou.html', 'w', encoding='utf-8') as f:
        f.write(page_text)

      案例2:

    import requests
    
    url = 'https://www.sogou.com/web'
    # 处理url请求的参数
    wd = input('enter a word:')
    param = {
        'query': wd
    }
    # 去浏览器请求头中找
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/70.0.3538.110 Safari/537.36
    ' } response = requests.get(url=url, params=param, verify=False, headers=headers) # get请求的时候参数是params # 设置响应数据的编码,防止有乱码 response.encoding = 'utf-8' # 3,获取响应数据,text是字符串形式的相应数据 page_text = response.text # 持久化存储 name = wd + '.html' with open(name, 'w', encoding='utf-8') as f: f.write(page_text) # 这里就遇到了反爬机制UA检测,User-Agent # 解决策略,UA伪装

      案例3:

    # 百度翻译
    
    # 页面中有可能存在动态加载的数据
    
    import requests
    
    wd = input('enter a English word:')
    url = 'https://fanyi.baidu.com/sug'
    data = {
        'kw': wd
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/70.0.3538.110 Safari/537.36
    ' } response = requests.post(url=url, data=data, headers=headers, verify=False) # post请求的参数是data # 前提响应数据必须是json obj_json = response.json() print(obj_json)

      

      案例4:

    # 爬取豆瓣电影中的电影详情数据
    
    import requests
    
    url = 'https://movie.douban.com/j/chart/top_list'
    
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 
        Chrome/70.0.3538.110 Safari/537.36
    ' } param = { 'type': '5', 'interval_id': '100:90', 'action': '', 'start': '0', 'limit': '20' } obj_json = requests.get(url=url, headers=headers, params=param, verify=False).json() print(obj_json) # 注意:页面中有些情况会包含动态加载的数据,比如下拉才会出来,这是ajax请求,在network中的XHR中

      

      案例4:

    # 爬取化妆品生产许可信息管理平台信息 http://125.35.6.84:81/xk/
    # 企业详情页中的详情数据也是动态加载出来的,详情页也是通过ajax请求(url:域名都一样,只不过是携带的参数(id)不一样)到的(企业的详情信息)
    import requests url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
        Chrome/70.0.3538.110 Safari/537.36
    ' } IDs = [] all_data = [] # 就要前三页数据 for page in range(1, 4): data = { 'on': 'true', 'page': str(page), 'pageSize': '15', 'productName': '', 'conditionType': '1', 'applyname': '', 'applysn': '', } # 首页ajax请求返回的响应数据 json_obj = requests.post(url=url, headers=headers, verify=False, data=data).json() for dic in json_obj['list']: ID = dic['ID'] IDs.append(ID) for id in IDs: detail_post_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById' data = { 'id': id } detail_dic = requests.post(url=detail_post_url, headers=headers, data=data, verify=False).json() all_data.append(detail_dic) # print(all_data)

     

  • 相关阅读:
    September 17th 2016 Week 38th Saturday
    【2016-09-16】UbuntuServer14.04或更高版本安装问题记录
    September 16th 2016 Week 38th Friday
    September 11th 2016 Week 38th Sunday
    September 12th 2016 Week 38th Monday
    September 10th 2016 Week 37th Saturday
    September 9th 2016 Week 37th Friday
    c++暂停
    八皇后问题
    ( 转转)Android初级开发第九讲--Intent最全用法(打开文件跳转页面等)
  • 原文地址:https://www.cnblogs.com/attila/p/10841171.html
Copyright © 2011-2022 走看看