python实现抓包的api_mitmproxy与python使用教程?如何能让 Python 实时获取到抓包的结果...

mitmproxy与python使用教程?如何能让 Python 实时获取到抓包的结果

mitmproxy与python使用教程2020-09-27 17:29:24人已围观

如何能让 Python 实时获取到抓包的结果

fiddler 可以写 js

burpsuite 可以写 python 脚本

mitmproxy

anyproxy

在 rule 里用 nodejs (懂点 js 应该都能驾驭) 处理数据

也可以把数据 post 到你自的 api 里(这样就不限定语言了)

BTW,我目前是在 android 机器里安装 anyproxy,监听到特定 app 的特定请求后,在 nodejs 里清洗数据,json 化后添加到远程 redis 队列,后台处理队列的有 python 也有 php

如何能让 Python 实时获取到抓包的结果

fiddler 可以写 js 脚本 burpsuite 可以写 python 脚本 mitmproxy anyproxy 在 rule 里用 nodejs (懂点 js 应该都能驾驭)

如何抓取汽车之家的车型库 Python中文社区

实际上,关于「抓取汽车之家的车型库我已经在「使用 Mitmproxy 接口」一文中了方法,不过那篇文章里讲的是利用 API 接口来抓取数据,一般来说,因为接口不会频繁改动,相对 WEB 页面而言更稳定,所以通常这是数据抓取的最佳选择,不过利用 API 接口来抓取数据有一些缺点,比如有的数据没有 API 接口,亦可能虽然有 API 接口,但是数据使用了加密格式,此时只能通过 WEB 页面来抓取数据。

既然要通过 WEB 页面来抓取数据,那么就不得不提到Scrapy,它可以说是爬虫之王,我曾经听说有人用 Scrapy,以有限的硬件资源在几天的时间里把淘宝商品数据从头到尾撸了一遍,如此看来,本文用 Scrapy 来抓取汽车之家的车型库应该是绰绰有余的了。

在抓取汽车之家的车型库之前,我们应该对其结构有一个大致的了解,按照百科中的描述,其大致分为四个级别,分别是品牌、厂商、车系、车型。本文主要关注车系和车型两个级别的数据。在抓取前我们要确定从哪个页面开始抓取,比较好的选择有两个,分别是产品库和品牌找车,选择哪个都可以,本文选择的是品牌找车,不过因为品牌找车页面使用了 js 来按字母来加载数据,所以直接使用它的话可能会有点不必要的麻烦,好在我们可以直接使用从A到Z的字母页面。

假设你已经有了 Scrapy 的运行环境(注:本文代码以 Python3 版本为准):

shell> scrapy startproject autohome

shell> cd autohome

shell> scrapy genspider automobile www.autohome.com.cn -t crawl

如此就生成了一个基本的蜘蛛骨架,需要说明的是 Scrapy 有两种蜘蛛,分别是 spider 和 crawl,其中 spider 主要用于简单的抓取,而 crawl 则可以用来实现复杂的抓取,复杂在哪里呢?主要是指蜘蛛可以根据规则萃取需要的链接,并且可以逐级自动抓取。就抓取汽车之家的车型库这个任务而言,使用 spider 就可以实现,不过鉴于 crawl 在功能上更强大,本文选择 crawl 来实现,其工作流程大致如下:通过 start_urls 设置起始页,通过 rules 设置处理哪些链接,一旦遇到匹配的链接地址,那么就会触发对应的 callback,在 callback 中可以使用 xpath/css 选择器来选择数据,并且通过 item loader 来加载 item:

车系

车型

文件:autohome/items.py:

# -*- coding: utf-8 -*-

import scrapy

from scrapy.loader.processors import MapCompose, TakeFirst

class SeriesItem(scrapy.Item):

series_id = scrapy.Field(

input_processor=MapCompose(lambda v: v.strip("/")),

output_processor=TakeFirst()

)

series_name = scrapy.Field(output_processor=TakeFirst())

class ModelItem(scrapy.Item):

model_id = scrapy.Field(

input_processor=MapCompose(lambda v: v[6:v.find("#")-1]),

output_processor=TakeFirst()

)

model_name = scrapy.Field(output_processor=TakeFirst())

series_id = scrapy.Field(output_processor=TakeFirst())

文件:autohome/autohome/spiders/automobile.py:

# -*- coding: utf-8 -*-

import json

import string

from scrapy import Request

from scrapy.http import HtmlResponse

from scrapy.linkextractors import LinkExtractor

from scrapy.loader import ItemLoader

from scrapy.spiders import CrawlSpider, Rule

from urllib.parse import parse_qs, urlencode, urlparse

from autohome.items import ModelItem, SeriesItem

class AutomobileSpider(CrawlSpider):

name = "automobile"

allowed_domains = ["www.autohome.com.cn"]

start_urls = [

"" x ".html"

for x in string.ascii_uppercase if x not in "EIUV"

]

rules = (

Rule(LinkExtractor(allow=("/\d /#",)), callback="parse_item"),

)

def parse(self,response):

params = {

"url": response.url,

"status": response.status,

"headers": response.headers,

"body": response.body,

}

response = HtmlResponse(**params)

return super().parse(response)

def parse_item(self, response):

sel = response.css("div.path")

loader = ItemLoader(item=SeriesItem(), selector=sel)

loader.add_css("series_id", "a:last-child::attr(href)")

loader.add_css("series_name", "a:last-child::text")

series = loader.load_item()

# 即将销售

版权声明:本站所有文章皆为原创,欢迎转载或转发,请保留网站地址和作者信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值