天津河西做网站哪家好全国建设信息网

张小明 2026/3/2 14:53:55
天津河西做网站哪家好,全国建设信息网,最近的新闻大事10条简短,一台vps可以做几个网站本文聚焦淘宝图片搜索#xff08;拍立淘#xff09; 和店铺全商品抓取的核心实现逻辑#xff0c;从「抓包分析→反爬破解→代码落地→异常处理」全流程拆解#xff0c;同时强调合规性与风控规避#xff0c;适合有基础 Python 爬虫经验的开发者学习#xff08;仅用于技术研…本文聚焦淘宝图片搜索拍立淘和店铺全商品抓取的核心实现逻辑从「抓包分析→反爬破解→代码落地→异常处理」全流程拆解同时强调合规性与风控规避适合有基础 Python 爬虫经验的开发者学习仅用于技术研究严禁商用。一、前置核心认知必看1. 合规红线不可触碰淘宝《平台服务协议》明确禁止未经授权的爬虫行为批量抓取 / 商用数据可能导致 IP 封禁、账号冻结甚至承担法律责任唯一合规路径接入「淘宝开放平台 API」需企业资质 官方授权个人无法申请本文代码仅用于技术学习建议单店铺 / 单图片小规模测试避免高频请求。2. 淘宝反爬核心机制反爬类型表现形式应对思路登录态验证无 Cookie 请求返回验证码 / 空白页手动登录获取 Cookietb_token签名加密请求参数sign由前端 JS 动态生成抓包提取加密 JS用 execjs 执行频率限制单 IP / 账号高频请求触发 403 / 限流随机延迟 代理 IP 分散请求时间设备指纹检测 WebDriver / 固定 UA伪造 UA 禁用 webdriver 特征验证码滑块验证 / 短信验证高频请求触发手动验证 / 对接打码平台如超级鹰3. 必备工具 环境1依赖库安装bash运行pip install requests parsel execjs pycryptodome pillow fake-useragent requests-toolbelt retryexecjs执行前端加密 JSpycryptodome处理加密 / 解密pillow图片预处理retry请求重试requests-toolbelt处理大文件请求可选mitmproxy抓包、Charles抓包、Node.js替代 execjs 执行 JS效率更高。2抓包工具核心推荐Charles/Fiddler/ 浏览器 F12Network用于抓取真实接口、参数、加密 JS关键设置开启 HTTPS 抓包安装证书过滤淘宝域名taobao.com/tmall.com。二、淘宝图片搜索拍立淘爬虫实现1. 接口抓包分析第一步1手动触发拍立淘登录淘宝网页版 → 点击首页「拍照搜」→ 上传本地图片打开浏览器 F12→Network→筛选「XHR/JSON」→ 找到核心请求接口地址https://s.taobao.com/simba/imgSearch.htmPOST请求方式POST表单提交核心参数参数名说明imageBase64图片 Base64 编码无data:image/jpeg;base64,前缀_tb_token_登录态 Token从 Cookie / 页面源码提取sign请求签名前端 JS 加密生成timestamp毫秒级时间戳响应格式JSON包含相似商品列表data.list。2图片预处理Base64 编码淘宝对图片大小 / 格式有要求建议≤1MBJPG/PNG需压缩 转 Base64python运行import base64 from PIL import Image from io import BytesIO def image_to_base64(image_path, max_size(800, 800)): 图片转Base64压缩去除前缀 :param image_path: 本地图片路径/网络图片URL :param max_size: 最大尺寸宽,高 :return: Base64字符串 try: # 处理本地图片 if image_path.startswith((http://, https://)): import requests resp requests.get(image_path, timeout10) img Image.open(BytesIO(resp.content)) else: img Image.open(image_path) # 压缩图片保持比例 img.thumbnail(max_size) # 转JPEG格式避免PNG透明通道问题 buffer BytesIO() img.save(buffer, formatJPEG, quality80) # 转Base64并去除前缀 base64_str base64.b64encode(buffer.getvalue()).decode(utf-8) return base64_str except Exception as e: raise ValueError(f图片转Base64失败{str(e)}) # 测试 if __name__ __main__: print(image_to_base64(./test.jpg))3签名破解核心难点淘宝sign参数由前端 JS 加密生成步骤如下抓包找到生成sign的 JS 文件浏览器 F12→Sources→搜索sign/md5提取加密逻辑示例需根据实际抓包更新用execjs执行 JS 生成sign。python运行import execjs import time # 淘宝拍立淘加密JS需根据实际抓包更新示例为简化版 ENCRYPT_JS const crypto require(crypto); function getSign(params, tb_token) { // 1. 参数按key排序 const keys Object.keys(params).sort(); let str ; for (let k of keys) { str k params[k]; } // 2. 拼接tb_token str tb_token; // 3. MD5加密并转大写 return crypto.createHash(md5).update(str).digest(hex).toUpperCase(); } def generate_sign(params, tb_token): 生成sign签名 try: # 编译JS ctx execjs.compile(ENCRYPT_JS) # 调用函数 sign ctx.call(getSign, params, tb_token) return sign except Exception as e: raise RuntimeError(f生成sign失败{str(e)}) # 测试 if __name__ __main__: params { imageBase64: 测试Base64, t: str(int(time.time()*1000)), _tb_token_: 你的_tb_token_ } print(generate_sign(params, params[_tb_token_]))4完整拍立淘爬虫代码带重试 反爬python运行import requests import time from fake_useragent import UserAgent from retry import retry # -------------------------- 配置项 -------------------------- # 登录后从浏览器复制F12→Network→任意请求→Cookie COOKIE 你的淘宝Cookie # 登录后从页面源码/请求参数提取F12→Elements→搜索_tb_token_ TB_TOKEN 你的_tb_token_ # 代理可选建议高匿代理 PROXIES { # http: http://127.0.0.1:7890, # https: http://127.0.0.1:7890 } # 随机UA UA UserAgent() # -------------------------- 核心函数 -------------------------- retry(tries3, delay2, backoff2) # 重试3次延迟递增 def taobao_image_search(image_path): 淘宝图片搜索拍立淘 :param image_path: 本地图片路径/网络图片URL :return: 解析后的商品列表 # 1. 图片转Base64 image_base64 image_to_base64(image_path) # 2. 构造基础参数 timestamp str(int(time.time() * 1000)) base_params { action: imgSearch, imageBase64: image_base64, t: timestamp, _tb_token_: TB_TOKEN, q: , spm: a21bo.jianhua.201866-taobao-item.1, callback: fjsonp_{int(time.time()*1000)}_{int(time.time()*1000)} } # 3. 生成sign签名 base_params[sign] generate_sign(base_params, TB_TOKEN) # 4. 构造请求头 headers { User-Agent: UA.random, Cookie: COOKIE, Referer: https://shang.taobao.com/, Origin: https://shang.taobao.com, Content-Type: application/x-www-form-urlencoded; charsetUTF-8, Accept: application/json, text/javascript, */*; q0.01, Accept-Language: zh-CN,zh;q0.9,en;q0.8 } # 5. 发送请求 try: resp requests.post( urlhttps://s.taobao.com/simba/imgSearch.htm, database_params, headersheaders, proxiesPROXIES, timeout20, verifyFalse # 忽略SSL验证可选 ) resp.raise_for_status() # 抛出HTTP错误 # 处理JSONP响应若有 resp_text resp.text if resp_text.startswith(jsonp_): resp_text resp_text[resp_text.find(()1 : resp_text.rfind())] # 解析JSON result resp.json() if not result.get(success): raise ValueError(f接口返回失败{result.get(msg)}) # 提取核心商品数据 goods_list result.get(data, {}).get(list, []) parsed_data [] for goods in goods_list: parsed_data.append({ 商品ID: goods.get(itemId), 商品标题: goods.get(title), 商品价格: goods.get(price), 商品链接: goods.get(clickUrl), 店铺名称: goods.get(shopName), 店铺ID: goods.get(shopId), 销量: goods.get(sales), 相似度: goods.get(similarity) # 图片相似度 }) return parsed_data except requests.exceptions.RequestException as e: raise RuntimeError(f请求失败{str(e)}) except Exception as e: raise RuntimeError(f解析失败{str(e)}) # -------------------------- 测试调用 -------------------------- if __name__ __main__: try: # 替换为你的图片路径 result taobao_image_search(./test.jpg) print(f搜索到{len(result)}件相似商品) for idx, goods in enumerate(result, 1): print(f\n【{idx}】{goods}) except Exception as e: print(f执行失败{str(e)})2. 拍立淘常见问题 解决方案问题原因解决方案sign 验证失败JS 加密逻辑过期重新抓包提取最新加密 JS登录态失效Cookie/_tb_token_过期重新登录淘宝复制最新 Cookie/tb_token返回验证码页面高频请求 / IP 风控更换 IP 增加延迟 手动完成滑块验证图片解析失败图片格式 / 大小不符合要求转 JPEG 压缩至 800x800 以内三、淘宝店铺全商品爬虫实现1. 核心分析1店铺 ID 提取关键淘宝店铺链接有多种格式需兼容提取shop_idpython运行import re def extract_shop_id(shop_url): 从店铺链接提取shop_id 支持格式 1. https://shop12345678.taobao.com/ 2. https://xxx.taobao.com/shop/view_shop.htm?user_number_id12345678 3. https://detail.tmall.com/seller_view.htm?user_id12345678 # 匹配shopXXXXXX.taobao.com pattern1 rshop(\d)\.taobao\.com # 匹配user_number_idXXXXXX pattern2 ruser_number_id(\d) # 匹配tmall的user_idXXXXXX pattern3 ruser_id(\d) match1 re.search(pattern1, shop_url) match2 re.search(pattern2, shop_url) match3 re.search(pattern3, shop_url) if match1: return match1.group(1) elif match2: return match2.group(1) elif match3: return match3.group(1) else: raise ValueError(f无法提取店铺ID{shop_url}) # 测试 if __name__ __main__: print(extract_shop_id(https://shop12345678.taobao.com/)) # 输出123456782店铺商品接口分析核心接口https://s.taobao.com/search?qseller_id{shop_id}page{page}GET分页规则每页 44 件商品page从 1 开始无商品时返回空列表数据载体接口返回 HTML核心数据内嵌在g_page_configJS 变量中JSON 格式。2. 完整店铺商品爬虫代码带分页 数据保存python运行import re import json import time import requests from parsel import Selector from fake_useragent import UserAgent from retry import retry # -------------------------- 配置项 -------------------------- COOKIE 你的淘宝Cookie PROXIES { # http: http://127.0.0.1:7890, # https: http://127.0.0.1:7890 } REQUEST_DELAY 3 # 请求延迟秒 MAX_PAGE 50 # 最大抓取页数防止无限循环 UA UserAgent() # -------------------------- 工具函数 -------------------------- def parse_taobao_goods_html(html): 解析淘宝商品列表HTML提取商品数据 selector Selector(texthtml) # 提取g_page_config核心数据 config_str selector.css(script:contains(g_page_config)::text).get() if not config_str: return [] # 清洗JSON字符串去除多余代码 try: config_str re.search(rg_page_config (.*?);\sg_srp_loadCss, config_str).group(1) config_data json.loads(config_str) except (re.error, json.JSONDecodeError): return [] # 提取商品列表 goods_list config_data.get(mods, {}).get(itemlist, {}).get(data, {}).get(auctions, []) parsed_data [] for goods in goods_list: parsed_data.append({ 商品ID: goods.get(nid), 商品标题: goods.get(raw_title), 商品价格: goods.get(view_price), 销量: goods.get(view_sales), 商品链接: fhttps://item.taobao.com/item.htm?id{goods.get(nid)}, 店铺名称: goods.get(nick), 店铺ID: goods.get(user_id), 发货地: goods.get(item_loc), 是否天猫: goods.get(is_tmall, False) }) return parsed_data retry(tries2, delay2) def crawl_shop_page(shop_id, page_no): 抓取单页商品 url fhttps://s.taobao.com/search?qseller_id{shop_id}page{page_no} headers { User-Agent: UA.random, Cookie: COOKIE, Referer: fhttps://shop{shop_id}.taobao.com/, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9 } resp requests.get( urlurl, headersheaders, proxiesPROXIES, timeout20, verifyFalse ) resp.raise_for_status() return parse_taobao_goods_html(resp.text) # -------------------------- 核心爬虫 -------------------------- def crawl_taobao_shop_all_goods(shop_url): 抓取店铺所有商品 # 1. 提取店铺ID shop_id extract_shop_id(shop_url) print(f开始抓取店铺ID{shop_id}) # 2. 分页抓取 all_goods [] page_no 1 while page_no MAX_PAGE: print(f抓取第{page_no}页...) try: # 随机延迟避免固定间隔 time.sleep(REQUEST_DELAY float(time.time() % 1)) # 抓取单页 page_goods crawl_shop_page(shop_id, page_no) if not page_goods: print(f第{page_no}页无商品抓取结束) break # 合并数据 all_goods.extend(page_goods) page_no 1 except Exception as e: print(f第{page_no}页抓取失败{str(e)}) # 失败后更换代理/增加延迟此处简化为跳过 page_no 1 continue # 3. 保存数据 with open(ftaobao_shop_{shop_id}_goods.json, w, encodingutf-8) as f: json.dump(all_goods, f, ensure_asciiFalse, indent4) print(f抓取完成共{len(all_goods)}件商品已保存至taobao_shop_{shop_id}_goods.json) return all_goods # -------------------------- 测试调用 -------------------------- if __name__ __main__: try: # 替换为目标店铺链接 crawl_taobao_shop_all_goods(https://shop12345678.taobao.com/) except Exception as e: print(f执行失败{str(e)})3. 店铺爬虫优化技巧动态页数判断通过商品总数g_page_config中totalCount计算总页数避免MAX_PAGE限制代理池集成对接动态代理池如阿布云每次请求切换 IP示例python运行def get_proxy(): 从代理池获取IP resp requests.get(http://你的代理池地址/get) return {http: resp.text, https: resp.text} # 在请求时使用proxiesget_proxy()数据去重基于商品 ID 去重部分店铺会重复展示商品断点续爬将已抓取的页数 / 商品 ID 保存到本地中断后可继续抓取。四、高级反爬应对策略1. 登录态自动维护使用selenium模拟登录需处理滑块验证码自动提取 Cookie/tb_token对接打码平台如超级鹰自动识别滑块验证码python运行# 示例超级鹰打码需注册账号 def get_captcha_result(captcha_img_path): import requests params { user: 你的账号, pass2: 你的密码MD5, softid: 你的软件ID, codetype: 1902 # 滑块验证码类型 } files {userfile: open(captcha_img_path, rb)} resp requests.post(http://upload.chaojiying.net/Upload/Processing.php, dataparams, filesfiles) return resp.json()[pic_str]2. JS 加密逻辑持久化将提取的加密 JS 保存为.js文件避免重复编译python运行# 读取外部JS文件 def load_encrypt_js(js_path): with open(js_path, r, encodingutf-8) as f: return f.read() ctx execjs.compile(load_encrypt_js(./taobao_sign.js))3. 设备指纹伪装禁用webdriver特征若用 seleniumpython运行from selenium import webdriver options webdriver.ChromeOptions() options.add_experimental_option(excludeSwitches, [enable-automation]) options.add_experimental_option(useAutomationExtension, False) driver webdriver.Chrome(optionsoptions) driver.execute_script(Object.defineProperty(navigator, webdriver, {get: () undefined}))五、合规替代方案淘宝开放平台 API若需长期稳定使用必须接入官方 API注册地址https://open.taobao.com/核心接口图片搜索taobao.pai.litao.search需申请权限店铺商品taobao.seller.item.search企业资质API 调用示例简化版python运行import requests import hashlib import time def taobao_open_api(app_key, app_secret, method, params): 淘宝开放平台API调用 timestamp time.strftime(%Y-%m-%d %H:%M:%S) params.update({ method: method, app_key: app_key, timestamp: timestamp, format: json, v: 2.0, sign_method: md5 }) # 生成签名 sign_str .join([f{k}{v} for k, v in sorted(params.items())]) app_secret params[sign] hashlib.md5(sign_str.encode()).hexdigest().upper() resp requests.get(https://eco.taobao.com/router/rest, paramsparams) return resp.json() # 调用示例需替换为真实AppKey/AppSecret # result taobao_open_api( # app_key你的AppKey, # app_secret你的AppSecret, # methodtaobao.seller.item.search, # params{seller_id: 店铺ID, page_no: 1} # )
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设报价模板平台网站建设协议书

2025年UNet技术突破:从医学影像到多模态融合的进化之路 【免费下载链接】stable-diffusion-2-base 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/stable-diffusion-2-base 导语 U-Net架构通过与Transformer、Mamba等技术融合,在202…

张小明 2026/1/20 2:58:21 网站建设

怎样做自己的个人网站什么网站可以做PS 写论文兼职

前言If you have any questions, feel free to communicate at any timeRecord each screen with code【V】【Guste8868】在工业控制等超宽温(-30~85℃工作)场景下,17.0 英寸高色域显示模组需兼具温度适应性与色彩精准度。友达 G170ETN02.0 凭…

张小明 2026/1/20 2:57:50 网站建设

北京网站建设搜q.479185700产品软文范例软文

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个针对电商网站的reset.css&#xff0c;特别处理&#xff1a;1. 列表项<li>的默认样式 2. 图片<img>的边框和间距 3. 表单元素的统一风格 4. 价格数字的特殊字体…

张小明 2026/1/20 2:56:48 网站建设

网站开发的工作经验专门做汽车配件保养的网站

Mustard UI&#xff1a;轻量级CSS框架如何让前端开发事半功倍 【免费下载链接】mustard-ui A starter CSS framework that actually looks good. 项目地址: https://gitcode.com/gh_mirrors/mu/mustard-ui 在追求极致性能的现代Web开发中&#xff0c;Mustard UI作为一款…

张小明 2026/1/20 2:55:46 网站建设

建设一个网站app需要多少钱建站工具哪个好用

3分钟零代码部署&#xff1a;构建企业级实时数据监控告警系统 【免费下载链接】gperftools Main gperftools repository 项目地址: https://gitcode.com/gh_mirrors/gp/gperftools 你是否正在为海量业务数据无法实时监控而焦虑&#xff1f;是否因系统异常发现太晚导致业…

张小明 2026/1/20 2:54:45 网站建设

怎么找做网站的外包公司品牌推广总监

Linux磁盘存储与打印操作全解析 1. Linux磁盘存储概述 在Linux系统中,所有文件和目录都存储在Linux文件系统上,这是一种经过格式化以存储目录树的磁盘设备,如硬盘。Linux系统的磁盘存储主要分为两种类型:固定存储和可移动存储。 固定存储 :指牢固连接到计算机系统,通常…

张小明 2026/1/20 2:54:14 网站建设