Android逆向实战(一)腾讯新闻去开屏广告

这篇具有很好参考价值的文章主要介绍了Android逆向实战(一)腾讯新闻去开屏广告。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

    上次反编译一个工具类app失败,原因是使用了360加固,回编译后无法启动。一般来讲,大厂的app考虑到性能、兼容性、包体积等,通常不用加固。因此,本次我们选一个大一些的app-腾讯新闻。写在前面:本篇博客仅用来研究和学习,如有侵权,请联系我删除,谢谢。

目录

一、前言

二、验证加固

1、反编译验证

2、ApkScan验证

三、反编译

1、使用apktool反编译

2、修改smali代码

3、回编译和签名

4、再次修改smali代码

5、再次花式修改源码


一、前言

    现在的app,不管是大厂的,还是一些名不见经传的小众app,都植入了非常多的广告。其中,最让人讨厌的应该就是开屏广告了,特别是那种一晃动就跳走的摇一摇广告。

    本篇,我们就通过腾讯新闻app手把手的教学,反编译去掉开屏广告。顺便一提:腾讯新闻的开屏广告真的是每次启动都必出:

Android逆向实战(一)腾讯新闻去开屏广告

二、验证加固

    首先,我们验证下腾讯新闻app是否加固,防止因为加固导致失败。验证加固有两种方式。

一种是反编译后不做任何修改直接回编译签名看是否可以安装和启动

一种是使用ApkScan验证

1、反编译验证

(1)反编译

apktool d /Users/xxx/Desktop/TencentNews_10565.apk  -o /Users/xxx/Desktop/TencentNews

(2)不做任何修改,直接回编译

apktool b /Users/xxx/Desktop/TencentNews

 (3)签名

java -jar apksigner.jar sign --ks /Users/xxx/Desktop/test.keystore  /Users/xxx/Desktop/TencentNews/dist/TencentNews_10565.apk

(4)安装

adb install -r /Users/xxx/Desktop/TencentNews/dist/TencentNews_10565.apk

安装后,启动腾讯新闻app,确认可以打开使用,验证结论:腾讯新闻app没有加固。 

2、ApkScan验证

执行以下命令:

java -jar /Users/xxx/Desktop/反编/ApkScan-PKID.jar

打开窗口后把apk拖进去:

Android逆向实战(一)腾讯新闻去开屏广告

验证结论:腾讯新闻app没有加固。

三、反编译

1、使用apktool反编译

    如果验证加固使用的方法一,那么直接把反编译文件夹中的dist文件夹删掉,使用反编译的产物就可以了。如果验证加固使用的方法二,可以重新执行下反编译。

apktool d /Users/xxx/Desktop/TencentNews_10565.apk -o /Users/xxx/Desktop/TencentNews

    我们打开res/layout文件夹,这里面有很多的xml文件,这里面包含的就是应用用到的系统控件和自身页面的xml布局文件,可以看到很多包含ad的xml文件,腾讯新闻里面确实很多广告,我们还是挑选开屏广告来看吧。一般来讲,开屏广告是作为启动页,打开AndroidManifest.xml文件,搜索android.intent.category.LAUNCHER,找到了SplashActivity,毫无疑问这就是启动页,大概率承载了开屏广告:

Android逆向实战(一)腾讯新闻去开屏广告

 使用adb命令启动SplashActivity

adb shell am start -n com.tencent.news/.activity.SplashActivity

    确实是启动页,反复启动多次,均没有出现开屏广告,怀疑是判断了点击图标启动app才会出开屏广告。那么,可以顺着这个猜想去试试。直接查看smali代码难度有点大,我们去看下源码。

2、修改smali代码

    直接使用jadx反编译,反编后搜索SplashActivity,打开SplashActivity这个类,搜索onCreate:

Android逆向实战(一)腾讯新闻去开屏广告

    可以看到有多个if/else的判断逻辑,并且有finish(),猜测是不是结束掉SplashActivity就进入首页了。我们尝试修改smali代码,注意在Jadx不能直接修改,去我们使用aptool反编译后的文件夹中去搜索SplashActivity,然后在SplashActivity.smali修改。在另一个else分支(cond_1)插入finish()的代码:

invoke-virtual {p0}, Lcom/tencent/news/ui/BaseActivity;->finish()V

return-void

Android逆向实战(一)腾讯新闻去开屏广告

3、回编译和签名

修改smali代码并且保存后,回编:

apktool b /Users/xxx/Desktop/TencentNews

签名生成新的apk: 

java -jar apksigner.jar sign --ks /Users/xxx/Desktop/test.keystore  /Users/xxx/Desktop/TencentNews/dist/TencentNews_10565.apk

Android逆向实战(一)腾讯新闻去开屏广告

    安装一下试试,这样是不行的,在首页直接退出app了,哈哈。之所以这样去尝试,其实是在我们的正常认知中,打开一个app首先是SplashActivity,然后是MainActivity,但其实在Manifest文件中也没搜到MainActivity,说不定SplashActivity也承担了主页的功能呢。 

4、再次修改smali代码

这次不fnish()了,直接插入return:

return-void

    再次执行回编译和签名后安装,果然也不行,卡在启动页不动了。这样尝试,是猜想app为了防止卡在启动页时间过长影响用户体验,可能会做一个定时的task,比如说3秒仍然未进入首页,则打开首页,但初步看上去TX新闻没有做这种兜底逻辑。

    这似乎更加验证了我们一开始的猜想:SplashActivity也承担了首页的功能,首页的几个tab应该是fragment,在首页的空白页面或开屏广告展现后,露出首页的新闻。其实可以在腾讯新闻的首页去dump一下activity:

adb shell dumpsys activity activities

可以看到,只有SplashActivity:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):

  Stack #1050: type=standard mode=fullscreen
  isSleeping=false
  mBounds=Rect(0, 0 - 0, 0)
    Task id #1051
    mBounds=Rect(0, 0 - 0, 0)
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
    * TaskRecord{5a6a1a0 #1051 A=com.tencent.news U=0 StackId=1050 sz=1}
      userId=0 effectiveUid=u0a1943 mCallingUid=u0a74 mUserSetupComplete=true mCallingPackage=com.huawei.android.launcher
      affinity=com.tencent.news
      intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.tencent.news/.activity.SplashActivity}
      mActivityComponent=com.tencent.news/.activity.SplashActivity
      autoRemoveRecents=false isPersistable=true numFullscreen=1 activityType=1
      rootWasReset=true mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE
      Activities=[ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}]
      askedCompatMode=false inRecents=true isAvailable=true
      stackId=1050
      hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE mSupportsPictureInPicture=false isResizeable=true lastActiveTime=5012950897 (inactive for 0s)
      * Hist #0: ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}
          packageName=com.tencent.news processName=com.tencent.news
          launchedFromUid=11943 launchedFromPackage=com.tencent.news userId=0
          app=ProcessRecord{5e2ec99 21259:com.tencent.news/u0a1943}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.news/.activity.SplashActivity (has extras) }
          frontOfTask=true task=TaskRecord{5a6a1a0 #1051 A=com.tencent.news U=0 StackId=1050 sz=1}
          taskAffinity=com.tencent.news
          mActivityComponent=com.tencent.news/.activity.SplashActivity
          baseDir=/data/app/com.tencent.news-wd3GPOer6dBCnZkO6QJNRg==/base.apk
          dataDir=/data/user/0/com.tencent.news
          stateNotNeeded=false componentSpecified=true mActivityType=standard
          compat={480dpi} labelRes=0x7f100073 icon=0x7f0e0000 theme=0x7f110127
          mLastReportedConfigurations:
           mGlobalConfig={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.228}
           mOverrideConfig={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.1}
          CurrentConfiguration={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=standard mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.1}
          taskDescription: label="null" icon=null iconResource=0 iconFilename=null primaryColor=ffe6e6e6
           backgroundColor=fff3f3f3
           statusBarColor=ff000000
           navigationBarColor=fefcfcfb
          launchFailed=false launchCount=0 lastLaunchTime=-20m25s855ms
          haveState=false icicle=null
          state=RESUMED stopped=false delayedResume=false finishing=false
          keysPaused=false inHistory=true visible=true sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_SHOWN
          fullscreen=true noDisplay=false immersive=false launchMode=1
          frozenBeforeDestroy=false forceNewConfig=false
          mActivityType=standard
           nowVisible=true lastVisibleTime=-14s822ms
          resizeMode=RESIZE_MODE_RESIZEABLE
          mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false

    Running activities (most recent first):
      TaskRecord{5a6a1a0 #1051 A=com.tencent.news U=0 StackId=1050 sz=1}
        Run #0: ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}

    mResumedActivity: ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}

  Stack #0: type=home mode=fullscreen
  isSleeping=false
  mBounds=Rect(0, 0 - 0, 0)

    Task id #1
    mBounds=Rect(0, 0 - 0, 0)
    mMinWidth=-1
    mMinHeight=-1
    mLastNonFullscreenBounds=null
    * TaskRecord{5bdd731 #1 A=com.huawei.android.launcher U=0 StackId=0 sz=1}
      userId=0 effectiveUid=u0a74 mCallingUid=0 mUserSetupComplete=true mCallingPackage=null
      affinity=com.huawei.android.launcher
      intent={act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300 cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher}
      mActivityComponent=com.huawei.android.launcher/.unihome.UniHomeLauncher
      autoRemoveRecents=false isPersistable=true numFullscreen=1 activityType=2
      rootWasReset=false mNeverRelinquishIdentity=true mReuseTask=false mLockTaskAuth=LOCK_TASK_AUTH_PINNABLE
      Activities=[ActivityRecord{5c57159 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}]
      askedCompatMode=false inRecents=true isAvailable=true
      mRootProcess=ProcessRecord{5706809 2869:com.huawei.android.launcher/u0a74}
      stackId=0
      hasBeenVisible=true mResizeMode=RESIZE_MODE_RESIZEABLE mSupportsPictureInPicture=false isResizeable=true lastActiveTime=5012936238 (inactive for 15s)
      * Hist #0: ActivityRecord{5c57159 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}
          packageName=com.huawei.android.launcher processName=com.huawei.android.launcher
          launchedFromUid=0 launchedFromPackage=null userId=0
          app=ProcessRecord{5706809 2869:com.huawei.android.launcher/u0a74}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000300 cmp=com.huawei.android.launcher/.unihome.UniHomeLauncher }
          frontOfTask=true task=TaskRecord{5bdd731 #1 A=com.huawei.android.launcher U=0 StackId=0 sz=1}
          taskAffinity=com.huawei.android.launcher
          mActivityComponent=com.huawei.android.launcher/.unihome.UniHomeLauncher
          baseDir=/system/app/HwLauncher6/HwLauncher6.apk
          dataDir=/data/user_de/0/com.huawei.android.launcher
          stateNotNeeded=true componentSpecified=false mActivityType=home
          compat={480dpi} labelRes=0x7f080084 icon=0x7f02012b theme=0x2060013
          mLastReportedConfigurations:
           mGlobalConfig={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.279}
           mOverrideConfig={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.12}
          CurrentConfiguration={1.0 ?mcc?mnc [zh_CN_#Hans] ldltr sw392dp w392dp h776dp 480dpi nrml long hdr port finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1176, 2400) mAppBounds=Rect(0, 72 - 1176, 2400) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0} suim:1 s.12}
          RequestedOverrideConfiguration={0.0 ?mcc?mnc ?localeList ?layoutDir ?swdp ?wdp ?hdp ?density ?lsize ?long ?ldr ?wideColorGamut ?orien ?uimode ?night ?touch ?keyb/?/? ?nav/? winConfig={ mBounds=Rect(0, 0 - 0, 0) mAppBounds=null mWindowingMode=undefined mDisplayWindowingMode=undefined mActivityType=home mAlwaysOnTop=undefined mRotation=undefined}}
          launchFailed=false launchCount=0 lastLaunchTime=-32d11h41m24s609ms
          haveState=true icicle=Bundle[mParcelledData.dataSize=8832]
          state=STOPPED stopped=true delayedResume=false finishing=false
          keysPaused=false inHistory=true visible=false sleeping=false idle=true mStartingWindowState=STARTING_WINDOW_NOT_SHOWN
          fullscreen=true noDisplay=false immersive=false launchMode=2
          frozenBeforeDestroy=false forceNewConfig=false
          mActivityType=home
           nowVisible=false lastVisibleTime=-16s580ms
          connections=com.android.server.wm.ActivityServiceConnectionsHolder@5ce1c6d
          resizeMode=RESIZE_MODE_RESIZEABLE
          mLastReportedMultiWindowMode=false mLastReportedPictureInPictureMode=false

    Running activities (most recent first):
      TaskRecord{5bdd731 #1 A=com.huawei.android.launcher U=0 StackId=0 sz=1}
        Run #0: ActivityRecord{5c57159 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}

    mLastPausedActivity: ActivityRecord{5c57159 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}

 ResumedActivity:ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}

  ResumedActivity: ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}

ActivityStackSupervisor state:
  topDisplayFocusedStack=ActivityStack{5e38a54 stackId=1050 type=standard mode=fullscreen visible=true translucent=false, 1 tasks}
mLastResumedActivity=ActivityRecord{5d0d791 u0 com.tencent.news/.activity.SplashActivity t1051}
  displayId=0 stacks=2
   mHomeStack=ActivityStack{5b6acd1 stackId=0 type=home mode=fullscreen visible=false translucent=true, 1 tasks}
   mPreferredTopFocusableStack=ActivityStack{5e38a54 stackId=1050 type=standard mode=fullscreen visible=true translucent=false, 1 tasks}
   mLastFocusedStack=ActivityStack{5e38a54 stackId=1050 type=standard mode=fullscreen visible=true translucent=false, 1 tasks}
  mCurTaskIdForUser={0=1051}
  mUserStackInFront={}
  isHomeRecentsComponent=true  KeyguardController:
    mKeyguardShowing=false
    mAodShowing=false
    mKeyguardGoingAway=false
    Occluded=false DismissingKeyguardActivity=null at display=0
    mDismissalRequested=false
    mVisibilityTransactionDepth=0
  LockTaskController
    mLockTaskModeState=NONE
    mLockTaskModeTasks=
    mLockTaskPackages (userId:packages)=
      u0:[]

5、一种存在badcase的去广告方案

    接下来,只能再去看看SplashActivity的代码了。其实,腾讯新闻开屏广告的展示时间是有上限的,差不多五秒,经过了几次搜索,发现了以下两个类,存在疑似控制开屏广告跳过时间的代码。

(1)SplashView

看类名应该是开屏的承载组件

Android逆向实战(一)腾讯新闻去开屏广告

 (2)SplashAdLoader

看类名应该是开屏广告的加载器

Android逆向实战(一)腾讯新闻去开屏广告

    接下来,尝试转到smali源码,把5000修改为0。这里需要注意的是:smali源码中使用的是16进制,因此是看不到5000的,打开SplashView.smali,可以看到,是0x1388L,而定义完这个常量后,smali代码中不会使用这个常量的名字,而是直接使用0x1388,因此直接搜索0x1388,全部替换为0x0:

Android逆向实战(一)腾讯新闻去开屏广告

SplashAdLoader.smali文件也一样,搜索1388后全部修改为0x0:

Android逆向实战(一)腾讯新闻去开屏广告

    改完后保存并且回编译和签名,安装新的app,多次启动确实没展示开屏广告了,大功告成。但这样修改并不是完美的,启动了几十次偶现露出开屏后瞬间自动消失,毕竟这么少量的代码修改app,多少会存在badcase。接下来,我们再看看有没有更好的方案?

6、完美的去开屏广告方案

    上面也提到过,SplashView看类名应该是开屏的承载组件。接下来,需要我们有耐心的详细看一下SplashView的源码。在入口方法init中发现了if/else的逻辑:

Android逆向实战(一)腾讯新闻去开屏广告非常简单且清晰的代码,翻译一下:

if (展示开屏广告) {
    // 挑选出一个开屏
    pickOutSplash();
} else {
    // 不展示广告
    showNoAd();
}

 接下来怎么修改呢?很简单了吧?没错,就是这样:

if (展示开屏广告) {
    // 不展示广告
    showNoAd();
} else {
    // 不展示广告
    showNoAd();
}

尝试修改SplashView.smali代码,找到pickOutSplash()

Android逆向实战(一)腾讯新闻去开屏广告

尝试做如下修改:

Android逆向实战(一)腾讯新闻去开屏广告

    接下来回编译,签名验证。哈哈,这次完美无漏出了,试了几十次,没问题,符合预期。再次总结一下反编app的几个步骤:

1、验证是否加固

2、反编译

3、分析和修改smali源码

4、回编译

5、签名

    最后,反编译app其实是不太好的行为。本文仅限于自娱自乐,研究和学习,坚决不会用于传播或商业行为。也希望看到本篇博客的朋友,不要用来做一些不好的事情,多多学些,传播正能量。文章来源地址https://www.toymoban.com/news/detail-427217.html

到了这里,关于Android逆向实战(一)腾讯新闻去开屏广告的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【uniapp开发小程序】设置全屏的开屏广告、长按识别图片、点击跳转通话 拨打电话

    效果图: 点击跳转其他小程序: uni.navigateToMiniProgram() 官方文档:uni.navigateToMiniProgram(OBJECT) | uni-app官网 全屏展示图片: \\\"navigationStyle\\\": \\\"custom\\\"  导航栏样式,仅支持 default/custom。custom即取消默认的原生导航栏 完整代码演示: 创建一个新的页面,用于显示广告页面 修改  man

    2024年02月11日
    浏览(44)
  • Android 逆向之脱壳实战篇

    作者:37手游安卓团队 前言 这篇文章比较干,比较偏实战,看之前建议先喝足水,慎入。 在学脱壳之前,我们先来复习一下,什么时候是加固? 加固本质上就是对 dex 文件进行加壳处理,让一些反编译工具反编译到的是 dex 壳,而不是 dex 文件本身。具体的实现方式是,将原

    2024年02月14日
    浏览(30)
  • Android Studio App开发实战项目之广告轮播(附源码 可用于大作业)

    需要图片集和源码请点赞关注收藏后评论区留言即可~~~ 电商App的首页上方,都在明显位置放了一栏广告条,并且广告条会轮播,非常吸引眼球,这种广告轮播的功能,为推广热门事物出力甚大。 轮播视频已上传至我的主页,有需要可自行前往观看~ 作为App首页的常客,广告轮

    2024年02月05日
    浏览(44)
  • 澎湃新闻对话腾讯丁珂:从“治已病”到“治未病”,企业需快速构建“安全免疫力”

    作者:澎湃新闻记者 周頔 随着数字化进程加快,企业数字化体系的边界在不断拓展,安全风险和挑战不断增加,传统被动防御的安全应对常显疲态,数字安全时代亟待建立全新的安全范式。 6月13日,腾讯安全联合IDC等多家机构在北京举办研讨论坛,并发布“数字安全免疫力

    2024年02月11日
    浏览(26)
  • 腾讯广点通广告投放-转化归因API回传接口对接踩坑指南

            对于腾讯广点通广告平台的文档,实在是忍不住要吐槽一番。本来接收到回传接口文档,看到给的PDF文档没有备注说明,但是看到回传方式,挺简单的。以为一下就能搞定了,但是对接下来才发现,各个字段根本不知道什么意思,后面再找其他文档,官网上,还有

    2024年02月09日
    浏览(30)
  • 初级爬虫实战——伯克利新闻

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 爬取 https://news.berkeley.edu/ 的字段,包含标题、内容,作者,发布时间,链接地址,文章快照 (可能需要翻墙才能访问) 我们可以按照新闻模块、版面、和文章对网页信息

    2024年03月14日
    浏览(32)
  • 初级爬虫实战——麻省理工学院新闻

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 爬取 news.mit.edu 的字段,包含标题、内容,作者,发布时间,链接地址,文章快照 (可能需要翻墙才能访问) 1.全部新闻大致分为4个模块 2.每个模块的标签列表大致如下

    2024年03月14日
    浏览(36)
  • python爬虫实战(1)--爬取新闻数据

    想要每天看到新闻数据又不想占用太多时间去整理,萌生自己抓取新闻网站的想法。 使用python语言可以快速实现,调用 BeautifulSoup 包里面的方法 安装BeautifulSoup 完成以后引入项目 定义请求头,方便把请求包装成正常的用户请求,防止被拒绝 定义被抓取的url,并请求加上请求

    2024年02月13日
    浏览(36)
  • 实战1-python爬取安全客新闻

    一般网站都会议/robots.txt目录,告诉你哪些地址可爬,哪些不可爬,以安全客为例子  可见,该请求成功;有很多网站在没有登录的情况下是请求失败的,这时需要添加请求头信息, 注意:有的cookie 会根据时间戳生成,有的会失效 haders={}, 2.1、首先 F12 到 Network 下,F5刷新 ,

    2024年02月03日
    浏览(38)
  • Android 优化广告图加载

    作用是:下载完成后,把图片显示在你广告图上,由于glide有三级缓存机制,因此,最好是提前在接口返回的时候,进行预加载,然后进入到广告启动的流程中的时候就可以直接复用上一次的bitmap,不会浪费相应的时间。因此思路如下: 接口数据---开始预加载广告图---》loa

    2024年01月20日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包