淘宝地址爬取及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 ...
随机推荐
- AtCoder Regular Contest 077
跟身在国外的Marathon-fan一起打的比赛,虽然最后没出F但还是涨分了. C - pushpush 题意:n次操作,每次往一个序列后面塞数,然后把整个序列翻转. #include<cstd ...
- Codeforces 626C Block Towers(二分)
C. Block Towers time limit per test:2 seconds memory limit per test:256 megabytes input:standard inp ...
- [bzoj1700]: [Usaco2007 Jan]Problem Solving 解题
不能贪心!不能贪心!不能贪心! 反正有反例(有的题目月初支付款很少,月末支付款很大,和前面的题凑到一个月的话可能导致下个月写不了= =这时放后一个月,和后面的题一起开始写可能更优) 比如: 50 44 ...
- Codeforces Round #300(Div. 2)-538A.str.substr 538B.不会 538C.不会 。。。
A. Cutting Banner time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Matrix Chain Multiplication(表达式求值用栈操作)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1082 Matrix Chain Multiplication Time Limit: 2000/100 ...
- SSH防爆破脚本
github地址:https://github.com/demonxian3/LittleScript/blob/master/SSHprotecter.sh 使用方法: 1.给足脚本权限,chmod ...
- HDU 1979 Red and Black
题目: There is a rectangular room, covered with square tiles. Each tile is colored either red or black ...
- WPF DataTrigger数据触发器
1.通过绑定的属性值变化,动态改变界面的显示,比如绑定了IsExpanded,当为true,grid高度变成600,反之,grid高度变成320. <Grid.Style> <Sty ...
- vue2.0项目中使用Ueditor富文本编辑器示例
最近在vue项目中需要使用富文本编辑器,于是将Ueditor集成进来,作为公共组件. 在线预览:https://suweiteng.github.io/vue2-management-platform ...
- robots书写说明:
"User-Agent"搜索引擎的名字. 针对所有搜索引擎写法:User-Agent: *,针对百度搜索引擎写法:User-Agent:Baiduspider "Allo ...