【大壮老师救我】爬取手机端美团App,进入买药--->搜索框--->阿莫西林

来源:1-1 移动端python爬虫进阶实战-2020版导学

只是为了好玩

2023-02-20

需求:
1.美团买药主页面中,在搜索输入框中输入目标药品名称,点击搜索按钮,待搜索结果加载完成,依次获取搜索到的目标药品销售信息结果的药品名称信息
2.从解析药品名称信息,核对该药品是否为目标药品(包括厂商和药品名称)
3.若核对该药品不是目标药品,则跳过该药品,继续核对下一条搜索结果
4.若核对药品是目标药品,则点击该药品信息,进入药品销售详情页面,获取药品名称、规格、销售价格和药店名称信息,将获取到的药品销售信息保存到Excel文件中
我的代码实现:

# -*- coding: utf8 -*-

from appium import webdriver

# desired_caps 配置信息
desired_caps = {
    "platformName": "Android",
    "platformVersion": "9.0",
    "deviceName": "8BN0217915008734",
    "appPackage": "com.sankuai.meituan",
    "appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
    'unicodeKeyboard': True,
    'resetKeyboard': True,
    'noReset': True
}

# Appium 服务地址
# 初始化 Appium driver
driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)  # 连接远程设备
# 等待启动完成
driver.implicitly_wait(5)
print("打开美团App成功")

# 1点击“买药”入口 点击搜索框

drug_entry = driver.find_element_by_xpath('//android.view.View[@content-desc="买药"]')
drug_entry.click()

# 1点击搜索框
search_box = driver.find_element_by_id('com.sankuai.meituan:id/search_content_et')
# search_box = driver.find_element_by_xpath(
#         "//android.widget.LinearLayout[@resource-id='com.sankuai.meituan:id/animte_action_search']")
search_box.click()
search_box.send_keys('阿莫西林')

# 点击搜索按钮

遇到的错误信息:

打开美团App成功
Traceback (most recent call last):
  File "...\test\demo1726.py", line 31, in <module>
    search_box = driver.find_element_by_id('com.sankuai.meituan:id/search_content_et')

    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.NoSuchElementException: Message: An element could not be located on the page using the given search parameters.

解决:不知道怎么办,卡了半天了,买了课,大壮老师教我。

我的完整代码:

# -*- coding: utf8 -*-
from appium import webdriver
import time
import openpyxl

# desired_caps 配置信息
desired_caps = {
    "platformName": "Android",
    "platformVersion": "9.0",
    "deviceName": "8BN0217915008734",
    "appPackage": "com.sankuai.meituan",
    "appActivity": "com.meituan.android.pt.homepage.activity.MainActivity",
    'unicodeKeyboard': True,
    'resetKeyboard': True,
    'noReset': True
}

# Appium 服务地址
# 初始化 Appium driver
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps) #连接远程设备
# 等待启动完成
driver.implicitly_wait(3)
print("打开美团App成功")

# 点击“买药”入口
# drug_entry = driver.find_element_by_xpath('//android.widget.TextView[@text="买药"]')
drug_entry = driver.find_element_by_xpath('//android.view.View[@content-desc="买药"]')
drug_entry.click()

# 点击搜索框
search_box = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/tv_search_carousel_text_item_text']")

search_box.click()
# 输入药品名称
search_box.send_keys('阿莫西林')

# 点击搜索按钮

search_button = driver.find_element_by_xpath("//android.widget.TextView[@resource-id='com.sankuai.meituan:id/tv_search_carousel_text_item_text']")
search_button.click()

# 等待搜索结果加载完成
time.sleep(5)

# 获取搜索结果中药品名称信息
elements = driver.find_elements_by_id('com.sankuai.meituan:id/tv_goods_name')

# 遍历搜索结果,获取销售信息
wb = openpyxl.Workbook()
ws = wb.active
ws.append(['药品名称', '规格', '销售价格', '药店名称'])

for element in elements:
    # 获取药品名称
    drug_name = element.text
    if '阿莫西林' not in drug_name:
        continue

    # 点击药品信息,进入药品销售详情页面
    element.click()
    time.sleep(3)

    # 获取药品销售信息
    drug_info = driver.find_element_by_id('com.sankuai.meituan:id/ll_drug_info')
    drug_details = drug_info.find_elements_by_class_name('android.widget.TextView')
    drug_name = drug_details[0].text
    drug_spec = drug_details[1].text
    drug_price = drug_details[2].text
    drug_store = driver.find_element_by_id('com.sankuai.meituan:id/tv_merchant_name').text

    # 将药品销售信息保存到Excel文件中
    ws.append([drug_name, drug_spec, drug_price, drug_store])

    # 返回搜索结果页面
    back_button = driver.find_element_by_class_name('android.widget.ImageButton')
    back_button.click()

# 保存Excel文件
wb.save('drug_sales.xlsx')

# 关闭 driver
driver.quit()

大壮老师可以帮帮我吗?我特地买您课程解决问题。
可以远程指导下吗?我这边环境都是好的,完备的。(QQ:1981791622)

写回答

1回答

大壮老师

2023-02-21

你好,你看的应该是老版本的课程,老版本课程使用的是appium工具对目标app进行数据抓取,新版本课程使用的是uiautomator2工具进行数据抓取,u2工具更加轻量级,两者使用差不多。

1
1
只是为了好玩
上班不方便看视频,要是有语雀文档就好了。
2023-02-21
共1条回复

移动端Python爬虫实战 数据抓取+数据可视化

从App数据抓取到数据可视化,全流程讲解

1831 学习 · 1003 问题

查看课程