借助UI Automator Viewer 开发BOSS直聘APP爬虫

鳄鱼君Ba

发表文章数:518

热门标签

,

Vieu四代商业主题

高扩展、安全、稳定、响应式布局多功能模板。

¥69 现在购买
首页 » Python教程 » 借助UI Automator Viewer 开发BOSS直聘APP爬虫

BOSS直聘是一个招聘APP,鳄鱼君Ba目前还没有工作,由于学习的是爬虫开发这一项,所以我们就来看一下这样的工作是否有公司需求。

鳄鱼君Ba使用UiAutomator来编写代码,为了减少代码量,需要将BOSS直聘APP放到手机屏幕能看到的位置,打开BOSS直聘APP,点击搜索按钮,寻找python爬虫,对数据进行提取和滑动屏幕的循环:

借助UI Automator Viewer 开发BOSS直聘APP爬虫

通过UI Automator Viewer分析APP的网页结构发现,每一个职为所需要的信息都在一个公共节点下面:

借助UI Automator Viewer 开发BOSS直聘APP爬虫

因此,这里同样可以使用先抓大再抓小的原则,首先获得每个职位的大结点,然后再从大结点里面取子结点。其中,薪资、公司名称、地址、工作经验要求和学历都是大结点的直接子节点,只有职位名称是大结点的子结点的子结点。每一个结点都可以使用resource-id来进行定位,并使用.text属性来得到值。首先构造滚动屏幕的函数

def scroll():
    device(scrollable=True).scroll.vert.forward() # 向上滚动屏幕

每抓完一页,就往上滚动屏幕,这样就能实现不停的抓取。现在我们来抓取每个职位的详细信息,并调试完善代码:

from uiautomator import Device
import time
device=Device()
def click(text):
    device(text=text).click()
    time.sleep(3)
def scroll():
    device(scrollable=True).scroll.vert.forward() # 向上滚动屏幕
item_dict={
    "job_name":"com.hpbr.bosszhipin:id/tv_position_name", # 职位
    "salary": "com.hpbr.bosszhipin:id/tv_salary_statue",  # 薪资
    "company":"com.hpbr.bosszhipin:id/tv_company_name", # 公司
    "employer":"com.hpbr.bosszhipin:id/tv_employer",  #雇主
}
def crawl():
    all_list=[]
    for data in device(resourceId="com.hpbr.bosszhipin:id/boss_job_card_view"): # 先抓大
        item={}
        if not data.exists: #如果不存在直接返回
            return
        for key, resource_id in item_dict.items():
            value =data.child(resourceId=resource_id) # 再抓小
            if not value.exists:#如果不存在直接返回
                return
            item[key]=value.text
            for infos in data.child(resourceId="com.hpbr.bosszhipin:id/fl_require_info"): # 单独抓取
                if not infos.exists:#如果不存在直接返回
                    return
                ww = infos.child(className="android.widget.TextView")
                item.update({"address":ww.text}) # 追加到item字典
        all_list.append(item)
    print(all_list)
if __name__ == '__main__':
    click("BOSS直聘")
    device.click(492,70) # 搜索按钮区域
    search_name = device(resourceId='com.hpbr.bosszhipin:id/et_search') # 搜索框
    if search_name.exists:
        search_name.set_text('python爬虫工程师')
    else:
        print('输入框还未出现')
    device.click(499,915) # 点击搜索
    time.sleep(3) # 等待搜索结果
    while True:
        crawl()
        scroll()

以上代码,直接在BOSS直聘APP的首页进行抓取。代码运行之后,你会发现控制台输出了工作信息,每次滚动会出现重复信息,这里还需要进行去重处理。由于程序需要一直运行下去,所以如果要进行去重处理,需要将每条信息添加到一个列表中,通过列表去重。

使用UI Automator View操作APP效率非常的慢,数据抓取方法也比较单一相比于Appium来说。为了提高效率都会选择控制多台手机进行抓取,这个后面有文章会介绍!

未经允许不得转载:作者:鳄鱼君Ba, 转载或复制请以 超链接形式 并注明出处 鳄鱼君Ba
原文地址:《借助UI Automator Viewer 开发BOSS直聘APP爬虫》 发布于2020-06-02

分享到:
赞(0) 赏杯咖啡

评论 抢沙发

6 + 8 =


文章对你有帮助可赏作者一杯咖啡

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.6主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
切换注册

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录
切换登录

注册