淘宝地址爬取及UI展示

淘宝地址爬取及UI展示

淘宝国家省市区街道获取

参考 foxiswhotaobao-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

使用

  • 克隆或下载代码,打开解决方案。
  • F5Ctrl+F5 调试代码。
  • 访问http://localhost:55516/ ,默认会进入Swagger页面。

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


设计说明

概述

核心逻辑说明:

详细

  1. 项目基于Asp.net Core,使用了几个核心包:

Autofac.Extensions.DependencyInjection:替换core的默认Ioc容器.

MediatR:用于业务逻辑解耦.

Swashbuckle.AspNetCore:生成Api的文档,供测试.

HangFire:后台任务,处理爬取街道逻辑.

Hangfire.MemoryStorage:只使用内存存储Hangfire任务

  1. 配置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; }
       }

详细说明参见上面 设置

  1. 上下文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; }
   //... 拆分所需字段
  1. 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<,>));

流程说明

原文地址:https://www.cnblogs.com/akini/p/8423203.html

时间: 2024-09-29 17:40:17

淘宝地址爬取及UI展示的相关文章

爬虫系列之淘宝商品爬取

1 import re 2 import requests 3 4 def getHTMLText(url): 5 try: 6 r = requests.get(url, timeout = 30) 7 r.raise_for_status() 8 r.encoding = r.apparent_encoding 9 return r.text 10 except: 11 return "" 12 13 14 def parsePage(ilt, html): 15 try: 16

淘宝地址快速提取插件 for 琴朗淘宝助手

琴朗淘宝助手是一款专为 淘宝卖家 设计的进销存助手软件 ,以人为本,界面简洁大方,极具实用性. 功能完善,不仅是一个活帐本,理财助手, 更是团队协作的完美平台. http://www.onlinedown.net/soft/100324.htm 此软件有一个不错的功能,就是可以自动分解淘宝地址到对应的字段,提高工作效率.如下: 可惜的是,由于淘宝地址格式的升级,以及某些情况出现地址不规范围的情况下.而此软件多时未升级... 所以,不得以... 本人做了一个淘宝地址快速提取插件 for 琴朗淘宝助

vue仿淘宝地址选择组件

Vue组件:省市区地址选择组件 <template> <div v-show="addressSelectShow" :style="{'left': leftValue + 'px', 'top': topValue + 'px' }" class="content"> <ul class="area-select"> <li v-for="(item, index) in

IP地址爬取

ip_spider.py= = = #!/usr/bin/python # coding: utf-8 import os import sys import requests import re import urllib import sys reload(sys) sys.setdefaultencoding( "utf-8" ) def getUrl(urlIP): url = 'http://www.123cha.com/ip/?q=%s' % urlIP r = reque

Python 爬虫知识点 - 淘宝商品检索结果抓包分析(续)

通过前一节得出地址可能的构建规律,如下: https://s.taobao.com/search?data-key=s&data-value=44&ajax=true&_ksTS=1481814489094_902&callback=jsonp903&q=Python%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0&imgfile=&js=1&stats_click=search_radio_all%3A1&i

python爬虫--爬取某网站电影下载地址

前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用到的网址仅供交流学习使用,如有不妥,请联系删除. 背景:自己有台电脑要给老爸用,老爷子喜欢看一些大片,但是家里网络环境不好,就想批量下载一些存到电脑里.但是目前大部分的网站都是这样的, 需要一个个地点进去,才能看到下载地址 如果我要下载100部电影,那肯定手都要点断了,于是便想把这些地址给爬取出来,

Python的几个爬虫代码整理(网易云、微信、淘宝、今日头条)

整理了一下网易云歌曲评论抓取.分析好友信息抓取.淘宝宝贝抓取.今日头条美图抓取的一些代码 抓取网易云评论 进入歌曲界面: http://music.163.com/#/song?id=453185824 找到如下的数据源: 贴一段Lyrichu的代码: (运行环境为P2.7) # -*- coding: utf-8 -*-# @Time : 2017/3/28 8:46# @Author : Lyrichu# @Email : [email protected]# @File : NetClou

淘宝复杂在哪里? 淘宝系的胜利

http://www.nowamagic.net/librarys/veda/detail/2347 淘宝帝国 双 11无疑是淘宝系(淘宝+天猫)的独舞. 阿里集团 11 月 12 日凌晨确认,11.11购物狂欢节的支付宝总销售额达到 191 亿元,是去年的三倍多,其中仅天猫就达成了 132 亿元,淘宝则完成了 59 亿元. 一个让人瞠目的结果:如果将百元大钞摞起来,191亿元可高达1.9万米,相当于世界最高建筑迪拜塔(828米)的 23 倍,用常用点钞机需要耗费 133 天. 另一个让人瞠目的

python模拟浏览器登陆淘宝(设置代理、输入验证码)

终于实现了登陆淘宝,这个验证码机制困惑了我好几天啊. 代码中验证码提供有两种方式,第一种通过webbrowser的open直接在浏览器中打开含有验证码的图片,第二种就是将其以jepg格式存在 C:\\Users\\Administrator\\Desktop\\checkcode.jepg.你可以根据自己主机的用户名更改路径.同时这个代码必须先指定用户名和账号也 可以实时输入账号的密码,小小修改一下代码就可以. 显示根据httpfox分析网页数据,之后再使用正则扣除你想要的数据,将其显示出来.过