Spider爬虫--手机App抓包爬虫

需求:手机抓包和下载图片(图片重命名)

1. 抓包工具准备

1.1 Fiddler 该软件端口默认是8888

1.2 猎豹免费WiFi:

1.3 手机设置代理服务器

使用命令ipconfig在windows上查看猎豹免费WiFi的产生的ip

手机设置代理服务器

2.Letvlive.py

import scrapy
import json
from Letv.items import LetvItem


# LetvliveSpider名字可以任意,继承scrapy.Spider,基本爬虫
class LetvliveSpider(scrapy.Spider):
    # 爬虫名称,在当前项目中名字不能重复发
    name = 'Letvlive'
    # 爬取的网站,只能在这个范围内容,如果注释掉,没有域名的限制,所以的网站都可以爬
    allowed_domains = ['letv.com']
    page = 1
    pre = "http://dynamic.live.app.m.letv.com/android/dynamic.php?luamod=main&mod=live&ctl=liveHuya&act=channelList&pcode=010210000&version=7.17&channelId=2168&pages="
    suf = "&country=CN&provinceid=1&districtid=9&citylevel=1&location=%E5%8C%97%E4%BA%AC%E5%B8%82%7C%E6%9C%9D%E9%98%B3%E5%8C%BA&lang=chs&region=CN"
    # start_urls里面的链接不受allowed_domains这里面的现在
    start_urls = [pre + str(page) + suf]
    def parse(self, response):
        json_text = response.text
        # 把json_text 转换成python_dict
        python_dict = json.loads(json_text)
        for item in python_dict["body"]["result"]:
            letvItem = LetvItem()
            # 获取昵称
            nick = item["nick"]
            image = item["screenshot"]
            letvItem["nick"] = nick
            letvItem["image"] = image
            print(letvItem)
            # 传递给pipelines(管道)
            yield letvItem
        if python_dict.get("header").get("status") == "1":
            self.page += 1
        new_url = self.pre + str(self.page) + self.suf

        # 会有相同的url链接,这个链接请求了,就不去请求
        # 把所以添加的链接,做去重处理,请求,当再次添加相同的链接进入的时候,判断请求过了,就不请求了
        # 把添加的,没有重复的请求后,爬虫结束了
        yield scrapy.Request(new_url, callback=self.parse)

3.pipelines.py

import scrapy
from scrapy.pipelines.images import ImagesPipeline
# 保存图片
import json
import os
from Letv.settings import IMAGES_STORE


# from scrapy.utils.project import get_project_settings
class LetvImagePipeline(ImagesPipeline):
    # IMAGES_STORE = get_project_settings().get("IMAGES_STORE")

    # 添加请求图片的路径
    def get_media_requests(self, item, info):
        # 图片下载路径
        image = item["image"]
        # 把图片路径添加到scrapy引擎里面,让对应的下载器帮我们下载图片
        yield scrapy.Request(image)

    # 当图片下载完成后,会调用的方法,并且把下载后的路径,回传到这个方法里
    def item_completed(self, results, item, info):
        print("results===", results)
        image = [x["path"] for ok, x in results if ok][0]
        print(image)
        # 把图片的名字重命名
        old_image_name = IMAGES_STORE + "/" + image
        # ./images/黑作坊丶小美儿.jpg
        new_image_name = IMAGES_STORE + "/" + item["nick"] + ".jpg"
        print("old_image_name==", old_image_name)
        print("new_image_name==", new_image_name)
        # 重命名
        os.rename(old_image_name, new_image_name)
        print(image)
        item["image_path"] = new_image_name
        return item


# 默认是处理文本
class LetvPipeline(object):
    # 爬虫开始执行的时候调用
    def open_spider(self, spider):
        self.file = open(spider.name + ".json", "w")

    def process_item(self, item, spider):
        python_dict = dict(item)
        # pyhton 字典-->pyhton str
        json_str = json.dumps(python_dict, ensure_ascii=False) + "\n"
        self.file.write(json_str)
        return item

    # 当爬虫结束的时候调用
    def close_spider(self, spider):
        self.file.close()

4.settings.py

# 不遵循爬虫协议
ROBOTSTXT_OBEY = False
ITEM_PIPELINES = {
    'Letv.pipelines.LetvPipeline': 301,  # 保存文本
    'Letv.pipelines.LetvImagePipeline': 300,  # 保存图片
}

# 图片保存的路径,一定要写,否则不去下载图片,要写对
IMAGES_STORE = "./images"

5.运行文件 ---start.py

from scrapy import cmdline

cmdline.execute("scrapy crawl Letvlive".split())

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏信安之路

聊一聊 SQLMAP 在进行 sql 注入时的整个流程

本文就用我们看的见的角度来分析,看看 sqlmap 到底发送了什么 payload,这些 payload 是怎么出来的,不深入代码层面。

29830
来自专栏机器学习算法与Python学习

简单几步教你用Python生成词云图

词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文本信息,使得浏览者只要一眼扫过文本就可领略文本的主旨。

59620
来自专栏王的机器

量化投资精品书籍

这本书真心好,作者就是极度追求技术把机器学习方法和量化投资结合起来。光是看里面如何打标签 (labelling), 采样 (sampling) 和分析回测危险 ...

19460
来自专栏sktj

python qtdesigner 拖拽工具

在PyQt中编写UI界面可以直接通过代码来实现,也可以通过Qt Designer来完成。Qt Designer的设计符合MVC的架构,其实现了视图和逻辑的分离,...

51740
来自专栏sktj

python 日期 字符串 互转

def datetime_toString(dt): return dt.strftime("%Y-%m-%d-%H")

32050
来自专栏sktj

python apscheduler 每两小时执行一次

from datetime import datetime from apscheduler.schedulers.blocking import Block...

41240
来自专栏sktj

python apscheduler interval/cron触发器详解 常用

interval 触发器 参数 说明 weeks (int) 间隔几周 days (int) 间隔几天 hours (int) 间隔几小时 min...

28920
来自专栏分布式爬虫

7、web爬虫讲解2—urllib库爬虫—状态吗—异常处理—浏览器伪装技术、设置用户代理

如果爬虫没有异常处理,那么爬行中一旦出现错误,程序将崩溃停止工作,有异常处理即使出现错误也能继续执行下去

14880
来自专栏机器学习算法与Python学习

Python效率工具 | SimpleHTTPServer

在实际工作中,我们时不时会有这样的一个需求:将文件传给其他同事。将文件传给同事本身并不是一个很繁琐的工作,现在的聊天工具一般都支持文件传输。但是,如果需要传送的...

13540
来自专栏机器学习算法与Python学习

Python奇淫技巧,5个数据可视化工具

数据可视化的工具和程序库已经极大丰盛,当你习惯其中一种或数种时,你会干得很出色,但是如果你因此而沾沾自喜,就会错失从青铜到王者的新工具和程序库。如果你仍然坚持使...

14020

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励