淘宝地址爬取及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#的托管代码和非托管代码的理解
理解托管和非托管代码的前提之下,要先了解CLR(公共语言运行库) .Net Framework 是由彼此独立又相关的两部分组成:CLR 和 类库, CLR是它为我们提供的服务,类库是它实现的功能. . ...
- js和jquery通过this获取html标签中的属性值
<html> <head> <script type="text/javascript" src="jquery-1.10.2.min.js ...
- Mac效率:配置Alfred web search
// 这是一篇导入进来的旧博客,可能有时效性问题. 想用搜索引擎搜东西,或者查字典时,一般的workflow是:打开浏览器-->打开搜索引擎/字典网站-->输入搜索关键字-->回车. ...
- Linux批量处理文件脚本
Linux shell字符串截取与拼接 一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1 # 号截取,删除左边 ...
- 【JavaScript 实现当前动态时间】
实现一个简单动态的当前时间 <!doctype html> <html lang="en"> <head> <meta charset=& ...
- DP入门
数塔HDU2084 #include <iostream> #include <algorithm> #include <cstdio> #include < ...
- JS 监听浏览器各个标签间的切换
以前看到过一些网页,在标签切换到其它地址时,网页上的标题上会发生变化,一直不知道这个是怎么做的,最近查了一些资料才发现有一个 visibilitychange 事件就可以搞定,这里将介绍一下页面可见性 ...
- Entity Framework Core 懒加载
众所周知在EF 6 及以前的版本中,是支持懒加载(Lazy Loading)的,可惜在EF Core 并不支持,必须使用Include方法来支持导航属性的数据加载.不过现在EF Core的开发团队打算 ...
- webstorm中sftp远程调试配制
sftp:secure file transfer protocol 文件安全传输协议 wb编辑代码,快速同步到远程 1.Tools -> Deployment -> Configurat ...
- 邓_ phpcms_
{pc:content action="lists" catid="$catid" num="10" order="id DESC ...