• python学习之ajax和可视化管理工具


    Ajax爬虫

    1. 浏览器中可看到正常显示的数据,但使用requests得到的结果并没有。 这是什么原因呢?
      requests获取的是原始的HTML文档,而浏览器中的页面是经过JS处理数据后生成的结果。
    2. 这些数据的来源有哪些情况呢?
      Ajax加载、包含在HTML文档中、经过JavaScript和特定算法计算后生成
      python学习之ajax和可视化管理工具
      Ajax(Asynchronous JavaScript and XML)异步的JS和XML。原理是: 利用JS在保证页面
      不被刷新、页面链接不改变的情况下与服务器交换数据并更新部分网页的技术。
      python学习之ajax和可视化管理工具

      Ajax如何分析页面?

      拖动刷新的内容由Ajax加载且页面的URL无变化,那么应该到哪里去查看这些Ajax请求呢?

    3. 开发者工具(F12)->Network选项卡, 获取页面加载过程中Browser与Server之间请求和响
      应。
    4. 筛选出所有的Ajax请求。在请求的上方有一层筛选栏,直接点击XHR(Ajax特殊的响应类型)
    5. 模拟Ajax请求,提取我们所需要的信息。

    python学习之ajax和可视化管理工具
    打开Ajax的XHR过滤器,然后一直滑动页面以加载新的微博内容。可以看到,会不断有
    Ajax请求发出。请求的参数有4个:type、value、containerid和page。
    python学习之ajax和可视化管理工具

    基于Ajax和requests采集器的微博爬虫

    import os
    
    import requests
    from colorama import Fore
    from fake_useragent import UserAgent
    from requests import HTTPError
    
    def download_page(url, parmas=None):
        """
        根据url地址下载html页面
        :param url:
        :param parmas:
        :return: str
        """
        try:
            ua = UserAgent()
            headers = {
                'User-Agent': ua.random,
            }
            #请求https协议的时候, 回遇到报错: SSLError
            #verify=Flase不验证证书
            response = requests.get(url, params=parmas, headers=headers)
        except  HTTPError as e:
            print(Fore.RED + '[-] 爬取网站%s失败: %s' % (url, str(e)))
            return None
        else:
            # content返回的是bytes类型, text返回字符串类型
            #response.json()方法会自动将字符串反序列为python数据类型
            """
            html = response.text        # 字符串
            json.loads(html)            # 将字符串反序列化为python数据类型
            """
            #return response.json()
            return response
    
    def parse_html(html):
        """
        参考源代码解析
        :param html:
        :return:
        """
        cards = html.get('data').get('cards')
        count = 0
        for card in cards:
            try:
                count += 1
                text = card['mblog'].get('text')
                pics = card['mblog'].get('pics')
                #todo: 1. 对于博客正文的内容进行处理: 删除标签(正则+re.sub)
                print("第%s篇微博正文内容: %s" % (count, text))
                if pics:
                    for index, pic in enumerate(pics):
                        pic_url = pic.get('url')
                        pic_content = download_page(pic_url).content
                        #图片网址-> 图片名称 https://wx1.sinaimg.cn/orj360/005N3SJDly1fyhlxakcj3j30dc0dcaa4.jpg
                        img_fname = os.path.join('weibo_pics', pic_url.split('/')[-1])
                        with open(img_fname, 'wb') as f:
                            f.write(pic_content)
                            print("下载第[%s]张图片成功" % (index + 1))
            except Exception as e:
                print("下载博客失败: %s" % (str(e)))
    
    if __name__ == '__main__':
        uid = input("请输入你要爬取微博博主的uid:")
        for page in range(10):
            url = 'https://m.weibo.cn/api/container/getIndex?uid=%s&type=uid&containerid=107603%s&page=%s' % (
            uid, uid, page)
            html = download_page(url).json()
            parse_html(html)

    Scrapy可视化管理工具

    Scrapyd
    Scrapyd是一个用于部署scrapy项目和通过HTTP API控制爬虫的服务软件。
    官方文档:http://scrapyd.readthedocs.org/
    Github项目地址: https://github.com/scrapy/scrapyd
    Scrapyd使用教程
    安装pip install scrapyd
    运行scrapyd命令,访问127.0.0.1:6800可看到可视化界面
    Scrapyd工作原理
    服务器端(scrapyd): 运行客户端部署的爬虫。
    客户端(scrapyd-client):将本地的scrapy项目打包发送到scrapyd 这个服务端
    安装 scrapyd-client: pip install scrapyd-client
    部署Scrapy项目使用教程
    scrapy项目配置scrapy.cfg文件
    其中的username 和 password 用于在部署时验证服务器的HTTP basic authentication,须要注
    意的是这里的用户密码并不表示访问该项目须要验证,而是登录服务器用的。

    [settings]
    default = ScrapyProject.settings
    #demo用来标识项目, 可任意命名, 不指定时。标识名默认是default
    [deploy:demo]
    #部署爬虫到目标服务器(url)
    url = http://localhost:6800/
    project = ScrapyProject
    username = admin
    #访问服务器所需的用户名和密码(如果不需要密码可以不写)
    password = westos123

    scrapyd-deploy部署项目

    #将本地爬虫项目部署到远程服务器端
    scrapyd-deploy demo -p ScrapyProject
    #运行命令查看服务端状态
    curl http://localhost:6800/daemonstatus.json

    查看项目spider
    通过scrapyd-deploy -l 查看当前目录下的可以使用的部署方式(target)

    
    scrapy list
    scrapyd-deploy -l
    scrapyd-deploy -L xxxx
    ```易错点: scrapyd-deploy运行时显示无此命令, 在Linux/Mac系统不会出现该报错, 那么
    Windows系统的特殊设置:
    #获取Python路径:   where Python
    #编辑文件: Python路径Scriptsscrapyd-deploy.bat
    @echo off
    "D:SoftwareAnaconda3envselectricitypython.exe"
    "D:SoftwareAnaconda3envselectricityScriptsscrapyd-deploy" %*
    
    Scrapyd API接口
    scrapyd的web界面比较简单,主要用于监控,所有的调度工作全部依靠接口实现.
    官方文档: http://scrapyd.readthedocs.org/en/stable/api.html
    开启爬虫 schedule
    curl http://localhost:6800/schedule.json -d project=项目名称 -d spider=爬虫名称
    停止 cancel
    curl http://localhost:6800/cancel.json -d project=项目名称 -d job=jobID
    列出爬虫
    curl http://localhost:6800/listspiders.json?project=项目名称
    删除项目
    curl http://localhost:6800/delproject.json -d project=项目名称
    SpiderKeeper可视化部署
    SpdierKeeper通过配合scrpyd管理爬虫,支持一键式部署,定时采集任务,启动,暂停等一系列的操作.原理
    是: 对scrapyd的api进行封装,最大限度减少你跟命令行交互次数.
    依赖包安装
    scrapy
    scrapyd
    SpiderKeeper
    启动SpiderKeeper
    spiderkeeper --server=http://localhost:6800
    启动成功后, 在浏览器访问127.0.0.1:5000,效果如下:
    ![](https://s4.51cto.com/images/blog/202004/22/e2dd23205d0eca01c1130ac40ae5ba65.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
    ### 创建项目
    若使用scrpayd-deploy工具部署后,spiderkeeper无法自动识别出部署的项目,必须在网页中手动部
    署.
    在scrpay项目中scrapy.cfg文件中写好scrapyd服务器信息
    生成egg文件命令:
    scrapyd-deploy --build-egg output.egg
    ### 上传文件
    ![](https://s4.51cto.com/images/blog/202004/22/4557082762a55acd287d320fe3b7c9d9.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
    运行项目
    可以一次运行和定时周期运行。
  • 相关阅读:
    elementUI table中的button 操作
    数组
    数组,字符串,数字之间的相互转换
    Element upload
    Vue中涉及到的三目运算与v-if结合
    ElementUI的input用法
    javascript的正则表达式
    Vue表单+Vue全局指令 v-focus 的引用
    ztree 异步加载大数据(一)
    vue mixins 混入项目实例
  • 原文地址:https://www.cnblogs.com/aiaitie/p/12772328.html
Copyright © 2020-2023  润新知