一、緊接上文js 判斷系統類型和手機型號(廠商)
- 上文實現了得到系統類型和手機型號了。現在手機型號有了,那麼有一個需求:功能是分辨訪問用戶的手機類型(安卓、IOS),然後跳轉對應頁面。最好能分清楚用戶的手機廠商型號(華爲、小米、oppo、vivo)等,然後分別調各自的應用商店。
- iOS倒也無所謂判斷了系統類型後直接到蘋果應用商店就行了(反正就一個應用商店);Android的話就要稍微麻煩一點了,要判斷不同廠商跳轉不同的應用商店(比如小米的就跳小米的應用商店)。
- 爲了實現這一需求我把型號寫個model.js存放起來,裏面一個Map數據結構,存儲每個手機型號要跳轉的頁面(因爲前面我們已經實現了得到手機型號了,所以這樣寫的)。
//省略前面部分
............
if (os == "iOS") {//ios系統的處理
os = md.os() + md.version("iPhone");
model = md.mobile();
window.location.href = iosShop.get('default');
} else if (os == "AndroidOS") {//Android系統的處理
os = md.os() + md.version("Android");
var sss = device_type.split(";");
var i = sss.contains("Build/");
if (i > -1) {
model = sss[i].substring(0, sss[i].indexOf("Build/"));
}
var locationHref = "";
//alert(model + "--" +androidShop.has(model));
if(null != model && "" != model && "undefined" != typeof(model) && androidShop.has(trim(model))){
locationHref = androidShop.get(trim(model));
}else {
//默認的地址
locationHref = androidShop.get("default");
}
window.location.href = locationHref;
}
............
//省略後面部分
- 現在還有一個大問題是沒有廠商型號的數據,這是個大問題。好在我百度了下
小米的userAgent
意外的搜索到了這個 fynas實用小工具
這裏的User-Agent正是我想要的,但是我要是用一個個複製粘貼實在太慢了。還是寫點代碼,解析html靠譜點。於是就用了Beautiful Soup。
二、Beautiful Soup安裝和使用
$ easy_install beautifulsoup4
或者
$ pip install beautifulsoup4
另外我這裏還用到了requests庫,可在這裏下載 requests下載,github裏面也有的。
- 首先使用requests庫訪問頁面得到html,再用Beautiful Soup去解析html,得到整個table。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'};
result = requests.post(url, data={}, verify=False);
# print(result.text);
# 初始化並指定解析器
soup = BeautifulSoup(result.text, "lxml");
# 得到table
table = soup.table;
- 然後就是得到全部tr標籤,查詢所有td,td我們要的是第4列User-Agent字符串,也就是td數組3,然後排除”User-Agent字符串”也就是沒頁的第一行,最後就是截取字符串得到手機型號的操作了。
tr_arr = table.find_all("tr");
for tr in tr_arr:
# //查詢所有td
tds = tr.find_all('td');
# for td in tds:
# 得到User-Agent字符串
# print(tds[3].get_text());
userAgent = tds[3].get_text();
if "User-Agent字符串" != userAgent :
user_agent_build = userAgent.split("Build/")[0];
user_agent_arr = user_agent_build.split(";");
phoneModel = user_agent_arr[len(user_agent_arr) - 1];
print(phoneModel.strip());
- 完整的代碼(完整代碼我把要加的js代碼手機型號寫入了文件):
# -*- coding: utf-8 -*-
'''
抓取 user-agent
文檔 https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#id10
zhouzhongqing
2018年7月10日22:06:48
'''
import requests;
from bs4 import BeautifulSoup
# 寫入文件
def write_to_file(file_name, txt):
'''''
講txt文本存入到file_name文件中
'''
print("正在存儲文件" + str(file_name));
# 1 打開文件
# w 如果沒有這個文件將創建這個文件
'''
'r':讀
'w':寫
'a':追加
'r+' == r+w(可讀可寫,文件若不存在就報錯(IOError))
'w+' == w+r(可讀可寫,文件若不存在就創建)
'a+' ==a+r(可追加可寫,文件若不存在就創建)
'''
f = open(file_name, 'a+', encoding='utf-8');
# 2 讀寫文件
f.write(str(txt));
# 3 關閉文件
f.close();
'''
發起請求
@:param url
'''
#爲了去重
userAgentList = [];
def requestUserAgent(url):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'};
result = requests.post(url, data={}, verify=False);
# print(result.text);
# 初始化並指定解析器
soup = BeautifulSoup(result.text, "lxml");
# 得到table
table = soup.table;
# print(table);
tr_arr = table.find_all("tr");
for tr in tr_arr:
# //查詢所有td
tds = tr.find_all('td');
# for td in tds:
# 得到User-Agent字符串
# print(tds[3].get_text());
userAgent = tds[3].get_text();
if "User-Agent字符串" != userAgent :
user_agent_build = userAgent.split("Build/")[0];
user_agent_arr = user_agent_build.split(";");
phoneModel = user_agent_arr[len(user_agent_arr) - 1];
print(phoneModel.strip());
#排重
if phoneModel.strip() not in userAgentList:
write_to_file("d:/vivo.txt","androidShop.set(\""+phoneModel.strip()+"\",vivoDownloadAddress);\n")
userAgentList.append(phoneModel.strip());
if __name__ == '__main__':
print("start");
'''
userAgent = "Mozilla/5.0 (Linux; Android 6.0; vivo Y67A Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/35.0.1916.138 Mobile Safari/537.36 T7/7.4 baiduboxapp/8.5 (Baidu; P1 6.0)";
user_agent_build = userAgent.split("Build/")[0];
user_agent_arr = user_agent_build.split(";");
phoneModel = user_agent_arr[len(user_agent_arr) - 1];
print(phoneModel.strip())
'''
for i in range(1, 83):
print("這是第"+str(i)+"頁");
#vivo的機型
requestUserAgent("http://www.fynas.com/ua/search?b=&d=vivo&page="+str(i));
'''
for i in range(1, 84):
print("這是第" + str(i) + "頁");
# 小米的機型
requestUserAgent("http://www.fynas.com/ua/search?d=%E5%B0%8F%E7%B1%B3&b=&page=" + str(i));
'''
print("end");
- 得到的vivo的手機型號
大致就是這樣了,要得到其他機型,就再加for循環,拼接URL來做就差不多了。