zoukankan      html  css  js  c++  java
  • 一个基于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的打算……

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

  • 相关阅读:
    6
    5
    4
    3
    Hive常用的DCL(Data Control Language)数据操作
    Hive常用的DQL(Data Query Language)数据操作
    Hive常用的DML(Data Manipulation Language)数据操作
    Hive常用的DDL(Data Definition Language)数据操作
    Hive常用的数据类型概述
    Hive的JDBC环境部署
  • 原文地址:https://www.cnblogs.com/Invisible-full-moon/p/7543781.html
Copyright © 2011-2022 走看看