当前位置: 首页 > news >正文

jsp网站服务建设是什么wordpress外部样式

jsp网站服务建设是什么,wordpress外部样式,中山网站建设服务,建设局跟住建局一样吗文章目录 【作者主页】#xff1a;吴秋霖 【作者介绍】#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作#xff01; 【作者推荐】#xff1a;对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》#xff0c;对分布… 文章目录 【作者主页】吴秋霖 【作者介绍】Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作 【作者推荐】对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》 还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章 说到GooglePlay自定义的数据结构解析起来真的是让人感觉到窒息。而且基本是每间隔一段时间就会稍微的发现变动解析规则基本持久不了太久可能就会失效不过都是一些细微的变动不值一提 GooglePlay是没有对外提供任何API的想要爬取相关的数据就需要通过Web端的方式Git上面也有国外的大佬开源了google-play-scraperPython跟JS版本的我记得都有直接导包调用 但是稳定性不够好也是基于Web端去爬取解析的一旦结构发生变化作者维护不够及时的话自然也就无法使用 之后参考开源的项目自己重新实现了数据抽取那一块逻辑并将解析服务部署在了境外服务器上然后通过远端调用的方式去解析 在我之前的Cloudflare反爬虫防护绕过文章中就是以一个第三方的APK下载网站为示例进行的讲解GooglePlay的APK包如果是在官方网站下载的话会比较麻烦直接可以用我提到的那个第三方网站取下载就行 主要爬取内容就是APP应用的相关描述信息如下图所示 在点击关于此应用的时候抓包可以看到重点数据集都嵌套在了HTML源代码中使用JS函数定义了AF_initDataCallBackdata参数就是加载的数据 尝试将数据拷贝出来不过发现太长了截图都放不下图片都给整裂开了反正就是巨长再加上多层嵌套需要拆解慢慢去写解析规则 接下来先实现对data数据的提取实现代码如下所示 async def extract_json_block(html, block_id):prefix re.compile(rAF_init[dD]ata[cC]all[bB]ack\s*\({[^{}]*key:\s* re.escape(block_id) .*?data:)suffix re.compile(r}\s*\)\s*;)try:block prefix.split(html)[1]block suffix.split(block)[0]except IndexError:raise PlayStoreException(Could not extract block %s % block_id)block block.strip()block re.sub(r^function\s*\([^)]*\)\s*{, , block)block re.sub(}$, , block)block re.sub(r, sideChannel: {$, , block)return block如上就是提取出来的数据拿到数据以后如果你是小白新手或许会因此放弃实在是让人头大现在开始实现解析核心逻辑代码如下所示 app_detail_ds_block ds:7 app_details_mapping {title: [app_detail_ds_block, 1, 2, 0, 0],developer_name: [app_detail_ds_block, 1, 2, 68, 0],developer_link: [app_detail_ds_block, 1, 2, 68, 1, 4, 2],price_inapp: [app_detail_ds_block, 1, 2, 19, 0],category: [app_detail_ds_block, 1, 2, 79, 0, 0, 1, 4, 2],video_link: [app_detail_ds_block, 1, 2, 100, 1, 2, 0, 2],icon_link: [app_detail_ds_block, 1, 2, 95, 0, 3, 2],num_downloads_approx: [app_detail_ds_block, 1, 2, 13, 1],num_downloads: [app_detail_ds_block, 1, 2, 13, 2],published_date: [app_detail_ds_block, 1, 2, 10, 0],published_timestamp: [app_detail_ds_block, 1, 2, 10, 1, 0],pegi: [app_detail_ds_block, 1, 2, 9, 0],pegi_detail: [app_detail_ds_block, 1, 2, 9, 2, 1],os: [app_detail_ds_block, 1, 2, 140, 1, 1, 0, 0, 1],rating: [app_detail_ds_block, 1, 2, 51, 0, 1],description: [app_detail_ds_block, 1, 2, 72, 0, 1],price: [app_detail_ds_block, 1, 2, 57, 0, 0, 0, 0, 1, 0, 2],num_of_reviews: [app_detail_ds_block, 1, 2, 51, 2, 1],developer_email: [app_detail_ds_block, 1, 2, 69, 1, 0],developer_address: [app_detail_ds_block, 1, 2, 69, 2, 0],developer_website: [app_detail_ds_block, 1, 2, 69, 0, 5, 2],developer_privacy_policy_link: [app_detail_ds_block, 1, 2, 99, 0, 5, 2],data_safety_list: [app_detail_ds_block, 1, 2, 136, 1],updated_on: [app_detail_ds_block, 1, 2, 145, 0, 0],app_version: [app_detail_ds_block, 1, 2, 140, 0, 0, 0] }async def find_item_from_json_mapping(google_app_detail_request_result, app_detail_mapping):ds_json_block app_detail_mapping[0]json_block_raw await extract_json_block(google_app_detail_request_result, ds_json_block)json_block json.loads(json_block_raw)return await get_nested_item(json_block, app_detail_mapping[1:])app_details_mapping则是解析数据的核心索引基本上变动较小因为数据都是在list中多级嵌套所以需要花费一点精力时间去分析app_detail_ds_block前段时间我记得是ds:5这个倒是会偶尔变动 class PlayStoreException(BaseException):def __init__(self, *args):if args:self.message args[0]else:self.message Nonedef __str__(self):if self.message:return PlayStoreException, {0}.format(self.message)else:return PlayStoreException raisedclass GooglePlayStoreScraper(object):def __init__(self):self.PLAYSTORE_URL https://play.google.comself.PROXIES {http: http://127.0.0.1:7890, https: http://127.0.0.1:7890}async def _app_connection(self, url, sleeptime2, retry0):for _ in range(retry 1):try:async with aiohttp.ClientSession() as session:async with session.get(url, proxyself.PROXIES) as response:return await response.text()except aiohttp.ClientError:if sleeptime 0:await asyncio.sleep(sleeptime)raise PlayStoreException(fCould not connect to : {url})async def get_nested_item(self, item_holder, list_of_indexes):index list_of_indexes[0]if len(list_of_indexes) 1:return await get_nested_item(item_holder[index], list_of_indexes[1:])else:return item_holder[index]async def get_app_details(self, app_id, countrynl, langnl):url f{self.PLAYSTORE_URL}/store/apps/details?id{quote_plus(app_id)}hl{lang}gl{country}request_result await self._app_connection(url, retry1)app {id: app_id, link: url}for k, v in app_details_mapping.items():try:app[k] await self.find_item_from_json_mapping(request_result, v)except PlayStoreException:raise PlayStoreException(fCould not parse Play Store response for {app_id})except Exception as e:self._log_error(country, fApp Detail error for {app_id} on detail {k}: {str(e)})app.setdefault(errors, []).append(k)app[developer_link] self.PLAYSTORE_URL app.get(developer_link, )app[category] app.get(category, ).replace(/store/apps/category/, )if data_safety_list in app:app[data_safety_list] , .join(item[1] for item in app[data_safety_list] if len(item) 1)soup BeautifulSoup(request_result, html.parser)list_of_categories , .join(, .join(category.text for category in element.find_all(span)) for element in soup.find_all(div, {class: Uc6QCc}))app[list_of_categories] list_of_categories if list_of_categories else app.setdefault(errors, []) [list_of_categories]if errors in app:plural s if len(app[errors]) 1 else app[errors] fDetail{plural} not found for key{plural}: {, .join(app[errors])}return app在完成上面爬虫程序核心入口的实现以后基本上用采集到数据解析都已经完成只需要调用get_app_details函数传人需要爬取的目标APP的包名即可爬取并解析数据如下所示 好了到这里又到了跟大家说再见的时候了。创作不易帮忙点个赞再走吧。你的支持是我创作的动力希望能带给大家更多优质的文章
http://www.w-s-a.com/news/707156/

相关文章:

  • 网站未备案怎么访问网站开发前端需要学什么
  • 正黄集团博弘建设官方网站wordpress设置固定链接和伪静态
  • wordpress 建网站视频如何实现网站生成网页
  • 杭州品牌网站建设推广个人的网站建设目标
  • 济南有哪些网站是做家具团购的贸易公司自建免费网站
  • wap网站psd成立公司在什么网站
  • 网站建设婚恋交友聊城网站建设费用
  • 沈阳网站建设联系方式尉氏县金星网架公司
  • 医院网站建设实施方案基础微网站开发信息
  • 网站建设开发服务费记账百度指数搜索
  • 网站建设备案流程windows优化大师有必要安装吗
  • 怎么网站定制自己做网站卖视频
  • 网站开发二线城市网站制作过程中碰到的问题
  • 最好网站建设公司制作平台小程序开发教程资料
  • 陕西省高速建设集团公司网站国内做会展比较好的公司
  • 建设学校网站的原因网页设计实训报告1500
  • 网站建设客户来源江门网站设计华企立方
  • 自己如何做棋牌网站宁波网络推广优化方案
  • 深圳招聘网站推荐seo网站推广方案
  • 彩票网站开发 合法学术会议网站建设
  • 商务网站建设论文答辩pptseo技术博客
  • 怎样才能有自己的网站桂林搭建公司
  • 哪个网站做视频赚钱万科
  • 莆系医疗网站建设wp如何做网站地图
  • 网站建设应急处置方案团购网站 备案问题
  • 网站建设 岗位职责浙江中天建设集团有限公司网站
  • 西海岸建设局网站用wordpress建站学什么
  • 网站静态和动态学校网站建设流程步骤
  • 做群头像的网站在线怎么做俄语网站
  • 西安网站定制开发国内cms推荐