BOSS直聘是一个招聘APP,鳄鱼君Ba目前还没有工作,由于学习的是爬虫开发这一项,所以我们就来看一下这样的工作是否有公司需求。
鳄鱼君Ba使用UiAutomator来编写代码,为了减少代码量,需要将BOSS直聘APP放到手机屏幕能看到的位置,打开BOSS直聘APP,点击搜索按钮,寻找python爬虫,对数据进行提取和滑动屏幕的循环:

通过UI Automator Viewer分析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来说。为了提高效率都会选择控制多台手机进行抓取,这个后面有文章会介绍!
声明:1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!