按品牌名称获取设备类型(手机/平板电脑/其他)

mat*_*890 11 api

我从各种来源获得了很多设备名称和制造商.我正在寻找一种程序化方式(可能是api)来确定哪些设备是手机,哪些是平板电脑,哪些是其他设备(例如计算机).

我搜索了网页,我只能找到非常好的WURFL API,但它无法仅通过其名称来确定设备.

设备的一些示例(名称,制造商):

Galaxy Note 3,三星

MID-97D,上网本

谢谢您的帮助!

编辑:

所有答案都非常好.如果我能分开赏金,我会做到这一点.

我选择给予GSMArena答案的赏金,因为它是最有用和实用的答案.

感谢大家!

Ben*_*aum 7

我建议采用一种更简单的方法.每当设备用于无线通信时,都必须进行认证.在美国 - 这就是FCC.

他们有一个API:

https://data.fcc.gov:443/api/accessibilityclearinghouse/product/searchProducts?api_key=23232323&format=json&rowPerPage=20&searchString=galaxy%20s4
Run Code Online (Sandbox Code Playgroud)

这很乐意回归:

  "maker": "Samsung",
Run Code Online (Sandbox Code Playgroud)

在此处查看:https://ach.fcc.gov/for-developers//#!/ API/product_searchProducts_get

您还可以查询eis,如eBay和亚马逊.


Div*_*lra 2

经过一段时间的搜索和谷歌搜索后,我发现了一个名为GSMArena的网站。现在该网站是手机和平板电脑的比较网站,您基本上可以看到平板电脑/手机的所有规格。查看搜索页面的源代码,我发现有一个带有“maker”类的div,其中包含所有搜索结果。

此外,一旦您单击手机/平板电脑链接,它会将您带到一个标题为“平板电脑名称 - 完整平板电脑规格”(如果是选项卡)的页面,以及“手机名称 - 完整手机规格”(如果是手机)的页面。

如果它发现与搜索查询直接匹配,它会直接重定向到规范页面,因此我添加了一个 If 测试来检查它是搜索页面还是规范页面。

我的程序获取“maker”div 中的第一个链接(使用BeautifulSoup),然后转到该链接,提取 html,然后获取页面的标题。

如果没有找到结果,我的程序会将其标记为“其他”

代码:

import urllib.request
from bs4 import BeautifulSoup
searchlist = ["galaxy note","nexus 10","nexus 5","galaxy ace","moto g","galaxy tab 2", "MID-97D"]
for searchstr in searchlist:
    other = False
    searchstr = searchstr.replace(" ", "%20")
    searchlink = "http://www.gsmarena.com/results.php3?sQuickSearch=yes&sName="+searchstr
    string = urllib.request.urlopen(searchlink).read().decode("ISO-8859-1")
    soup = BeautifulSoup(string,"lxml")
    if soup.title.string == "Phone Finder results - GSMArena.com":
        makerdiv = soup.find_all('div', attrs={'class': 'makers'})
        links = makerdiv[0].find_all('a')
        if len(links) != 0:
            link = "http://www.gsmarena.com/" + links[0].attrs['href']
            string = urllib.request.urlopen(link).read().decode("ISO-8859-1")
            soup = BeautifulSoup(string,"lxml")
        else:
            other = True
    if other == False:
        title = soup.title.string
        name = title.split("-")[0]
        rest = title.split("-")[1]
        taborphone = rest.split(" ")[2]
    else:
        name = searchstr
        taborphone = "other"
    print("Name:",name)
    print("Type:",taborphone)
Run Code Online (Sandbox Code Playgroud)

输出:

Name: Samsung Galaxy Note5 
Type: phone
Name: Samsung Google Nexus 10 P8110 
Type: tablet
Name: LG Nexus 5X 
Type: phone
Name: Samsung Galaxy Ace 3 
Type: phone
Name: Motorola Moto G (3rd gen) 
Type: phone
Name: Samsung Galaxy Tab 2 7.0 P3100 
Type: tablet
Name: MID-97D
Type: other
Run Code Online (Sandbox Code Playgroud)

它有效:)

优点:

该数据库将始终保持更新,GSMArena 的数据库中有大量手机和平板电脑

缺点:

它不能用于平板电脑和手机以外的设备,例如上网本等。

我刚刚注意到 @Oli 在评论中建议了 GSMArena。

  • 问题的重点是一种对设备进行分类的方法,正如您所指出的,尽管 FCC 是一个绝妙的主意,但它无法告诉您它是什么类型的设备...... (2认同)