淘宝地址爬取及UI展示
淘宝地址爬取及UI展示
淘宝国家省市区街道获取
参考 foxiswho 的 taobao-area-php 部分代码,改由c#重构。
引用如下:
- Autofac
- MediatR
- Swagger
- HangFire 生成街道数据爬取任务。
演示
https://akinix.github.io/Taobao-Area-CSharp/index.html

前端源码稍后上传,请关注 deepfunc
Release
生成的release中包含省市区县.js和街道.json.
目的
为了方便获取中国大陆及港澳台省市区县街道相关数据,根据 淘宝地址js,解析并生成相关数据。
设置
所有设置都在 appsettings.json 中
| 说明 | 默认值 | |
|---|---|---|
| TaobaoJsVersion | 淘宝js的版本,方便淘宝js更新后修改 | 6.0.14 |
| TaobaoAreaJsUrl | 默认值中有占位符,会替换为TaobaoJsVersion的值 | https://g.alicdn.com/vip/address/{0}/index-min.js |
| JsDirectoryName | 生成的相关js及json文件的目录 | js |
| JsTemplate | 生成的js模版 | 见代码 |
| AreaPickerDataJsName | 生成的js文件名,默认值中有占位符,会替换为TaobaoJsVersion的值 | area.picker.data.{0}.js |
| TaobaoStreetUrl | 爬取街道使用的url | https://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1={0}&l2={1}&l3={2} |
| TempDirectoryName | 临时目录,下载淘宝js用 | temp |
使用
克隆或下载代码,打开解决方案。
F5或Ctrl+F5调试代码。访问http://localhost:55516/ ,默认会进入Swagger页面。

再打开一个新页面,访问Hangfire面板 http://localhost:55516/hangfire/jobs/enqueued, 可以查看爬取街道的任务执行情况.

如需演示整个流程,请在Swagger页面,执行
/api/v1/TaobaoAreas/ReBuild,该逻辑会重新下载js及重新爬取街道信息;执行/api/v1/TaobaoAreas/Build则会根据js是否存在来下载,根据json是否存在来爬取数据.
设计说明
概述

核心逻辑说明:

详细
项目基于Asp.net Core,使用了几个核心包:
Autofac.Extensions.DependencyInjection:替换core的默认Ioc容器.
MediatR:用于业务逻辑解耦.
Swashbuckle.AspNetCore:生成Api的文档,供测试.
HangFire:后台任务,处理爬取街道逻辑.
Hangfire.MemoryStorage:只使用内存存储Hangfire任务
配置
TaobaoAreaSettings.cs代码如下:
public class TaobaoAreaSettings
{
public string TempDirectoryName { get; set; }
public string TaobaoJsVersion { get; set; }
public string TaobaoAreaJsUrl { get; set; }
public string JsTemplate { get; set; }
public string AreaPickerDataJsName { get; set; }
public string TaobaoStreetUrl { get; set; }
public string JsDirectoryName { get; set; }
}
详细说明参见上面 设置
- 上下文
AreaContextService,代码片段如下,详情请查看github源码,该类注入为InstancePerLifetimeScope,每次请求会创建一个新对象,注入相关代码查看AutofacModules\ApplicationModule.cs
builder.Register(c => new AreaContextService())
.As<AreaContextService>()
.InstancePerLifetimeScope();
其内部主要维护整个逻辑执行过程中需要的数据
public bool IsForce { get; private set; } // 是否强制重新生成js及重新爬取街道数据
public Dictionary<string, object> MainDictionary { get; set; } // 主数据字典:最终生成js时需要的数据
public string ProvinceString { get; private set; }
public string GangAoString { get; private set; }
//... 拆分所需字段
- MediatR相关服务注入:
builder.RegisterAssemblyTypes(typeof(IMediator).GetTypeInfo().Assembly)
.AsImplementedInterfaces();
// 注入IRequestHandler和INotificationHandler的相关实现
// Send -> RequestHandler
// Publish -> NotificationHandler
var mediatrOpenTypes = new[]
{
typeof(IRequestHandler<,>),
typeof(IRequestHandler<>),
typeof(INotificationHandler<>),
};
foreach (var mediatrOpenType in mediatrOpenTypes)
{
builder
.RegisterAssemblyTypes(typeof(MediatorModule).GetTypeInfo().Assembly)
.AsClosedTypesOf(mediatrOpenType)
.AsImplementedInterfaces();
}
// 参照官网
builder.Register<SingleInstanceFactory>(context =>
{
var componentContext = context.Resolve<IComponentContext>();
return t => { object o; return componentContext.TryResolve(t, out o) ? o : null; };
});
builder.Register<MultiInstanceFactory>(context =>
{
var componentContext = context.Resolve<IComponentContext>();
return t =>
{
var resolved = (IEnumerable<object>)componentContext.Resolve(typeof(IEnumerable<>).MakeGenericType(t));
return resolved;
};
});
builder.RegisterGeneric(typeof(LoggingBehavior<,>)).As(typeof(IPipelineBehavior<,>));
流程说明

淘宝地址爬取及UI展示的更多相关文章
- Python post请求模拟登录淘宝并爬取商品列表
一.前言 大概是一个月前就开始做淘宝的爬虫了,从最开始的用selenium用户配置到selenium模拟登录,再到这次的post请求模拟登录.一共是三篇博客,记录了我爬取淘宝网的经历.期间也有朋友向我 ...
- [分享]ip地址爬取过滤的shell
http://www.hbbzy.me/分享ip地址爬取过滤的shell #!/bin/base #ip zhi地址匹配 #获取最新的ip地址 #author:haifeng #wget ftp:// ...
- 淘宝封装的一款ui 非常不错
好用的淘宝ui http://m.sui.taobao.org/demos/ 手机端访问地址
- python+echarts+flask实现对全国疫情数据的爬取并可视化展示
用Python进行数据爬取并存储到数据库,3.15学习总结(Python爬取网站数据并存入数据库) - 天岁 - 博客园 (cnblogs.com) 通过echarts+flask实现数据的可视化展示 ...
- vue仿淘宝地址选择组件
Vue组件:省市区地址选择组件 <template> <div v-show="addressSelectShow" :style="{'left': ...
- IP地址爬取
ip_spider.py= = = #!/usr/bin/python # coding: utf-8 import os import sys import requests import re i ...
- selenium实现淘宝的商品爬取
一.问题 本次利用selenium自动化测试,完成对淘宝的爬取,这样可以避免一些反爬的措施,也是一种爬虫常用的手段.本次实战的难点: 1.如何利用selenium绕过淘宝的登录界面 2.获取淘宝的页面 ...
- Python 爬虫知识点 - 淘宝商品检索结果抓包分析(续一)
通过前一节得出地址可能的构建规律,如下: https://s.taobao.com/search?data-key=s&data-value=44&ajax=true&_ksT ...
- ip地址库 新浪,淘宝
原文连接地址:http://www.9958.pw/post/city_ip function getAddressFromIp($ip){ $urlTaobao = 'http://ip.taoba ...
随机推荐
- C陷阱:求数组长度
// 这是一篇导入进来的旧博客,可能有时效性问题. 程序中,当我们建立了一个int型数组:int a[]={1,2,3,4,5,6};随后我们可能需要知道它的长度,此时可以用这种方法:length = ...
- UML建模之时序图(Sequence Diagram)
一.时序图简介(Brief introduction) 二.时序图元素(Sequence Diagram Elements) 角色(Actor) 对象(Object) 生命线(Lifeline) 控制 ...
- 移动端APP列表点透事件处理方法
关于点透事件这里不再赘述,如果不清楚的可以上网搜一搜,或者看小火柴的这篇文章. 这里是自己在做移动端时,在列表滑动的时候,遇到的点透问题.出现这个问题的来由是因为在转场的时候,各个手机的转场效果不一样 ...
- 学习笔记-express路径问题
在页面渲染成功之后,报错出现静态文件css样式引用路径出错,于是我就根据express api文档,托管静态文件作出修改,最后全是徒劳.于是我又从引用开始找起,<link rel="s ...
- UVALive 3882 - And Then There Was One【约瑟夫问题】
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- Codeforces 626D Jerry's Protest(暴力枚举+概率)
D. Jerry's Protest time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...
- BZOJ1786: [Ahoi2008]Pair 配对/1831: [AHOI2008]逆序对
这两道题是一样的. 可以发现,-1变成的数是单调不降. 记录下原有的逆序对个数. 预处理出每个点取每个值所产生的逆序对个数,然后dp转移. #include<cstring> #inclu ...
- mui 区域三级联动
<link href="../../css/mui.picker.css" rel="stylesheet" /><link href=&qu ...
- [国嵌攻略][054][NandFlash驱动设计_写]
Nand Flash支持按页写和随机写两种方式,在下面实现的是按页写.闪存在写数据时,只能写入1,不能写入0,所以写函数必须和擦除函数一起使用,并且擦除函数是按块擦除. /************** ...
- React Native学习(六)—— 轮播图
本文基于React Native 0.52 Demo上传到Git了,有需要可以看看,写了新内容会上传的.Git地址 https://github.com/gingerJY/React-Native-D ...