• 一个基于Scrapy框架的pixiv爬虫


     源码 https://github.com/vicety/Pixiv-Crawler,功能什么的都在这里介绍了

    说几个重要的部分吧

    登录部分

    困扰我最久的部分,网上找的其他pixiv爬虫的登录方式大多已经不再适用或者根本就没打算登录……

    首先,登录时显然要提交FormData,一开始我请求的是 https://accounts.pixiv.net/login?lang=zh 这个页面

    这个postkey可以发现和网页代码中的这个部分(下图)中是一样的,但是用这个postKey是登录不上去的,结果见下图

    登录可以成功(收到异常登录邮件),但无论你访问什么页面,它都会无限重定向回这个页面,一开始以为是header填得不完整,可是怎么改都不对

    后来发现request请求 http://www.pixiv.net 得到的页面中也有一个postKey(不太明白上一个postKey的含义,难道是特意骗我们一下……)

     改用这个,成功登录,剩下应该不是什么问题了

     日榜部分

    对于日榜的获取(虽然还没有写进去)也值得提一下,日榜的展现是下拉到底端自动获取下一页式的,分析网络请求,发现这一条的链接应该指向的就是下一页,并且去除后面的&tt=96a6bd8c731d3a46a9388f1e8cd90edf也是一样可以访问的

    我们进入链接,发现是一个json文件,对于我们来说其实更加易于处理

    另外说一下,这里推荐Chrome浏览器的JSONView插件,自动解析JSON成方便看的模式,火狐似乎自带这个功能

    import json 
    
    js = json.loads(response.text)
    
    url = js["content"]["0"]["url”]

    可以使用类似这样的代码方便地读取json文件

    另外注意load和loads函数的区别,loads用于处理字符串而load用于处理文件,对于将文件或是字符串转为json则有dump和dumps函数,就像下面这个例子

    import json
    data = {
        'a': '123',
        'b': True,
        'c': None,
        'd': 456,
        }
    with open("test.json", 'w') as f:
        json.dump(data, f)
    
    # test.json 内容
    # {"a": "123", "b": true, "c": null, "d": 456}
    
        

    搜索部分

    在完成按tag搜索的部分时发现,图片div的class都是这种奇怪的格式,尽管在我的电脑上搜索了其他几个tag这些class的名字都是一样的,但是看这种class的名字就有种莫名的不安啊……可能在换个环境class也是会动态变化的

     另外发现网页中的这个部分data-items的结构就是json,于是剩下的部分又变得方便很多了

    图片获取

     在pipeline中获取图片时header中一定要记得带referer,否则会触发p站的防盗链机制,返回403

    重要的部分差不多就这些,其他按scrapy的套路走就行

    最后,本来想做个GUI的,尝试用pyqt5,发现分离GUI线程和爬虫线程好像挺难解决的,两个线程间用signal通信也很困难,毕竟临时学的qypt,解决不了也正常,于是放弃做GUI的打算……

    渣代码,轻喷,欢迎交流指教

  • 相关阅读:
    [转]tesseract api C++使用例子
    Flyway记录
    线程安全性和共享
    并发初解
    生产环境中遇到过什么问题?或者有没有自己解决什么问题比较自豪的
    Java白皮书关键词理解【随记】
    技术面试记录
    Mac下完全卸载IntelliJIdea
    docker提交镜像后运行新容器mysql无法启动
    IntelliJ IDEA切换SDK解决卡顿的问题
  • 原文地址:https://www.cnblogs.com/Invisible-full-moon/p/7543781.html
Copyright © 2020-2023  润新知