Commit 1e486d20 authored by shenjunlin's avatar shenjunlin

修改代码

parent 6f611a1f
...@@ -51,7 +51,6 @@ ...@@ -51,7 +51,6 @@
<module>webmagic-core</module> <module>webmagic-core</module>
<module>webmagic-extension/</module> <module>webmagic-extension/</module>
<module>webmagic-scripts/</module> <module>webmagic-scripts/</module>
<module>webmagic-selenium</module>
<module>webmagic-saxon</module> <module>webmagic-saxon</module>
<module>webmagic-samples</module> <module>webmagic-samples</module>
</modules> </modules>
......
...@@ -16,7 +16,7 @@ public class ZhihuPageProcessor implements PageProcessor { ...@@ -16,7 +16,7 @@ public class ZhihuPageProcessor implements PageProcessor {
@Override @Override
public void process(Page page) { public void process(Page page) {
page.addTargetRequests(page.getHtml().links().regex("https://www\\.zhihu\\.com/question/\\d+/answer/\\d+.*").all()); page.addTargetRequests(page.getHtml().links().regex("https://www\\.zhihu\\.com/question/\\d+/answer/\\d+.*").all());
page.putField("title", page.getHtml().xpath("//h1[@class='QuestionHeader-title']/text()").toString()); page.putField("title", page.getHtml().xpath("//*[@id=\"zh-recommend-list\"]/div/h2/a/text()").toString());
page.putField("question", page.getHtml().xpath("//div[@class='QuestionRichText']//tidyText()").toString()); page.putField("question", page.getHtml().xpath("//div[@class='QuestionRichText']//tidyText()").toString());
page.putField("answer", page.getHtml().xpath("//div[@class='QuestionAnswer-content']/tidyText()").toString()); page.putField("answer", page.getHtml().xpath("//div[@class='QuestionAnswer-content']/tidyText()").toString());
if (page.getResultItems().get("title")==null){ if (page.getResultItems().get("title")==null){
......
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<artifactId>webmagic-extension</artifactId> <artifactId>webmagic-extension</artifactId>
<properties>
<webdrivermanager.version>2.1.0</webdrivermanager.version>
</properties>
<dependencies> <dependencies>
<dependency> <dependency>
...@@ -18,8 +21,6 @@ ...@@ -18,8 +21,6 @@
<dependency> <dependency>
<groupId>com.google.guava</groupId> <groupId>com.google.guava</groupId>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
<version>15.0</version>
<optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>us.codecraft.duiba</groupId> <groupId>us.codecraft.duiba</groupId>
...@@ -30,6 +31,31 @@ ...@@ -30,6 +31,31 @@
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
</dependency> </dependency>
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.4.3</version>
<exclusions>
<exclusion>
<artifactId>selenium-remote-driver</artifactId>
<groupId>org.seleniumhq.selenium</groupId>
</exclusion>
<exclusion>
<artifactId>selenium-api</artifactId>
<groupId>org.seleniumhq.selenium</groupId>
</exclusion>
</exclusions>
</dependency>
</dependencies> </dependencies>
</project> </project>
\ No newline at end of file
package us.codecraft.webmagic.downloader.selenium; package us.codecraft.webmagic.downloader;
import org.openqa.selenium.By; import org.openqa.selenium.By;
import org.openqa.selenium.Cookie; import org.openqa.selenium.Cookie;
...@@ -10,7 +10,6 @@ import us.codecraft.webmagic.Page; ...@@ -10,7 +10,6 @@ import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Request; import us.codecraft.webmagic.Request;
import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Task; import us.codecraft.webmagic.Task;
import us.codecraft.webmagic.downloader.Downloader;
import us.codecraft.webmagic.selector.Html; import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.PlainText; import us.codecraft.webmagic.selector.PlainText;
...@@ -99,8 +98,8 @@ public class SeleniumDownloader implements Downloader, Closeable { ...@@ -99,8 +98,8 @@ public class SeleniumDownloader implements Downloader, Closeable {
page.setHtml(new Html(content, request.getUrl())); page.setHtml(new Html(content, request.getUrl()));
page.setUrl(new PlainText(request.getUrl())); page.setUrl(new PlainText(request.getUrl()));
page.setRequest(request); page.setRequest(request);
//webDriverPool.returnToPool(webDriver); webDriverPool.returnToPool(webDriver);
webDriverPool.closeAll(); //webDriverPool.closeAll();
return page; return page;
} }
......
package us.codecraft.webmagic.downloader.selenium; package us.codecraft.webmagic.downloader;
import io.github.bonigarcia.wdm.*; import io.github.bonigarcia.wdm.*;
import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriver;
......
package us.codecraft.webmagic.downloader.selenium; package us.codecraft.webmagic.downloader;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
......
package us.codecraft.webmagic.downloader.selenium; package us.codecraft.webmagic.downloader;
import org.junit.Ignore; import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
......
...@@ -44,6 +44,18 @@ ...@@ -44,6 +44,18 @@
<groupId>junit</groupId> <groupId>junit</groupId>
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies> </dependencies>
......
package us.codecraft.webmagic.model.samples;
public class MobileVO {
private String oldModel;
private String brandName;
private String brandPinyin;
private String mobileName;
private String model;
private String price;
public String getOldModel() {
return oldModel;
}
public void setOldModel(String oldModel) {
this.oldModel = oldModel;
}
public String getBrandName() {
return brandName;
}
public void setBrandName(String brandName) {
this.brandName = brandName;
}
public String getBrandPinyin() {
return brandPinyin;
}
public void setBrandPinyin(String brandPinyin) {
this.brandPinyin = brandPinyin;
}
public String getMobileName() {
return mobileName;
}
public void setMobileName(String mobileName) {
this.mobileName = mobileName;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
@Override
public String toString() {
return "MobileVO{" +
"oldModel='" + oldModel + '\'' +
", brandName='" + brandName + '\'' +
", brandPinyin='" + brandPinyin + '\'' +
", mobileName='" + mobileName + '\'' +
", model='" + model + '\'' +
", price='" + price + '\'' +
'}';
}
}
...@@ -73,7 +73,7 @@ public class News163 implements MultiPageModel { ...@@ -73,7 +73,7 @@ public class News163 implements MultiPageModel {
public static void main(String[] args) { public static void main(String[] args) {
OOSpider.create(Site.me(), News163.class).addUrl("http://news.163.com/13/0802/05/958I1E330001124J_2.html") OOSpider.create(Site.me(), News163.class).addUrl("http://news.163.com/13/0802/05/958I1E330001124J_2.html")
.scheduler(new RedisScheduler("localhost")).addPipeline(new MultiPagePipeline()).addPipeline(new ConsolePipeline()).run(); .addPipeline(new MultiPagePipeline()).addPipeline(new ConsolePipeline()).run();
} }
} }
...@@ -73,7 +73,6 @@ public class AnjukeSpider implements PageProcessor { ...@@ -73,7 +73,6 @@ public class AnjukeSpider implements PageProcessor {
public static void main(String[] args) throws JMException { public static void main(String[] args) throws JMException {
HttpClientDownloader httpClientDownloader = new HttpClientDownloader(); HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
// httpClientDownloader.setProxyProvider(new SimpleProxyProvider(ProxyUtils.getAllProxy()));
Spider anjuke = Spider.create(new AnjukeSpider()).setDownloader(httpClientDownloader) Spider anjuke = Spider.create(new AnjukeSpider()).setDownloader(httpClientDownloader)
.setScheduler(new FileCacheQueueScheduler("spider").setDuplicateRemover(new HashSetDuplicateRemover())) .setScheduler(new FileCacheQueueScheduler("spider").setDuplicateRemover(new HashSetDuplicateRemover()))
......
...@@ -34,4 +34,13 @@ public class GithubRepo { ...@@ -34,4 +34,13 @@ public class GithubRepo {
public void setReadme(String readme) { public void setReadme(String readme) {
this.readme = readme; this.readme = readme;
} }
@Override
public String toString() {
return "GithubRepo{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", readme='" + readme + '\'' +
'}';
}
} }
\ No newline at end of file
...@@ -27,6 +27,7 @@ public class GithubRepoPageProcessor implements PageProcessor { ...@@ -27,6 +27,7 @@ public class GithubRepoPageProcessor implements PageProcessor {
} else { } else {
page.putField("repo", githubRepo); page.putField("repo", githubRepo);
} }
} }
@Override @Override
......
package us.codecraft.webmagic.samples; package us.codecraft.webmagic.samples;
import com.google.common.collect.Lists;
import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.pipeline.ResultItemsCollectorPipeline;
import us.codecraft.webmagic.processor.PageProcessor; import us.codecraft.webmagic.processor.PageProcessor;
/** /**
...@@ -16,7 +18,6 @@ public class IteyeBlogProcessor implements PageProcessor { ...@@ -16,7 +18,6 @@ public class IteyeBlogProcessor implements PageProcessor {
public void process(Page page) { public void process(Page page) {
page.addTargetRequests(page.getHtml().links().regex(".*yanghaoli\\.iteye\\.com/blog/\\d+").all()); page.addTargetRequests(page.getHtml().links().regex(".*yanghaoli\\.iteye\\.com/blog/\\d+").all());
page.putField("title",page.getHtml().xpath("//title").toString()); page.putField("title",page.getHtml().xpath("//title").toString());
page.putField("content",page.getHtml().smartContent().toString());
} }
@Override @Override
...@@ -28,6 +29,11 @@ public class IteyeBlogProcessor implements PageProcessor { ...@@ -28,6 +29,11 @@ public class IteyeBlogProcessor implements PageProcessor {
} }
public static void main(String[] args) { public static void main(String[] args) {
Spider.create(new IteyeBlogProcessor()).thread(5).addUrl("http://yanghaoli.iteye.com/").run(); final ResultItemsCollectorPipeline resultItemsCollectorPipeline = new ResultItemsCollectorPipeline();
Spider.create(new IteyeBlogProcessor()).thread(5).addUrl("http://yanghaoli.iteye.com/").addPipeline(resultItemsCollectorPipeline).run();
// Spider.create(new IteyeBlogProcessor()).thread(5).startUrls(Lists.newArrayList("http://yanghaoli.iteye.com/")).addPipeline(resultItemsCollectorPipeline).run();
resultItemsCollectorPipeline.getCollected().stream().forEach(resultItems -> {
System.out.println(resultItems);
});
} }
} }
package us.codecraft.webmagic.samples;
import com.google.common.collect.Lists;
import io.github.bonigarcia.wdm.ChromeDriverManager;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.dbutils.DbUtils;
import org.apache.commons.lang3.StringUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import us.codecraft.webmagic.model.samples.MobileVO;
import us.codecraft.webmagic.selector.Html;
import us.codecraft.webmagic.selector.Selectable;
import us.codecraft.webmagic.utils.DBUtils;
import java.sql.DriverManager;
import java.util.List;
public class Mobils {
public static final List<String> models = Lists.newArrayList("iphone",
"oppoa57",
"oppor9s",
"huawei nxt-al10",
"vivox9",
"oppo r9s",
"oppoa59s",
"oppo r9m",
"vivoy66",
"oppoa37m",
"oppor9m",
"oppo a37m",
"vivox7",
"lex620",
"oppo a33",
"oppor11",
"mi 4lte",
"oppoa33",
"vivoy51",
"redminote4x",
"mi 5",
"vivoy51a",
"oppo a59m",
"redminote3",
"huawei tag-al00",
"mha-al00",
"oppor9tm",
"le x620",
"oppor9sk",
"oppo r9tm",
"oppoa59m",
"oppo a59s",
"vivox20a",
"gn5001s",
"huawei mla-al10",
"huawei rio-al00",
"oppor9splus",
"vivoy55a",
"vivox7plus",
"oppo a57",
"vivoy67",
"vivoy67a",
"oppo r7",
"vivoy66l",
"oppoa57t",
"vivov3maxa",
"bln-al10",
"oppo r7s",
"vivox9plus",
"oppo a33m",
"huaweinxt-al10",
"huaweimla-al10",
"oppo r7sm",
"letvx500",
"m5note",
"redminote4",
"huawei mt7-tl10",
"vivox6d",
"oppor11s",
"m3 note",
"oppor11t",
"hm 2a",
"redmi4a",
"huawei tag-tl00",
"vivox9s",
"redminote2",
"huawei mt7-cl00",
"oppoa33m",
"pra-al00x",
"redmi4x",
"huawei caz-al10",
"redmi 3s",
"frd-al10",
"vivov3ma",
"mi6",
"pra-al00",
"vivox9i",
"huawei nxt-tl00",
"mi5",
"bln-al40",
"mi5x",
"letvx501",
"mi max",
"vivoy67l",
"duk-al20",
"huawei mt7-tl00",
"redmi 3",
"huaweitag-al00",
"a31",
"huawei tit-al00",
"trt-al00a",
"letv x500",
"m2 note",
"eva-al10",
"m3note",
"vivox6sa",
"huawei vns-al00",
"mi4lte",
"zh-cn;",
"vtr-al00",
"vivoy31a",
"redmi3s",
"oppo r9sk",
"hmnote1lte",
"oppor7sm",
"huaweicaz-al10",
"m1 metal",
"vivox9l",
"stf-al10",
"was-al00",
"oppor7s",
"m5 note",
"mimax",
"m5",
"ipad",
"gn8003",
"m2note",
"nem-al10",
"samsung sm-g9350",
"cam-tl00",
"oppo a53",
"oppoa77",
"hmnote1s",
"mi 5s",
"bnd-al10",
"oppo a53m",
"redminote5a",
"mi 3",
"redmi3",
"cam-al00",
"oppor7",
"huawei gra-tl00",
"gn5005",
"oppoa37t",
"vivoy55",
"bac-al00",
"huaweirio-al00",
"dig-al00",
"vky-al00",
"hm note 1s",
"vivox9splus",
"kiw-al10",
"huawei tit-tl00",
"letv x501",
"vivox20",
"f100",
"nxt-al10",
"vivoy31",
"mimax2",
"sm-g9350",
"gionees10",
"huaweitag-tl00",
"redmi 4",
"2014813",
"oppoa53",
"sla-al00",
"oppor9st",
"huawei gra-ul10",
"vivox6a",
"minotelte",
"f100l",
"m1metal",
"cun-al00",
"m3",
"vivoy55l",
"gn8002s",
"hm2a",
"huawei p7-l07",
"f100s",
"frd-al00",
"huawei crr-ul00",
"vivox5prod",
"vivox9sl",
"vivoy23l",
"huawei vns-tl00",
"vivox5m",
"s9",
"m1 note",
"lephonet7+",
"vivoy35",
"huawei nxt-dl00",
"vivov3",
"vivoxplay5a",
"eva-al00",
"huawei gra-ul00",
"redmi4",
"m3s",
"f103",
"oppor11plus",
"oppoa53m",
"r7plusm",
"vivox6plusd",
"gn5003",
"mi-4c",
"samsung sm-a7000",
"trt-al00",
"googlebot",
"gn3003",
"bln-al20",
"huawei gra-cl00",
"lephonet7a",
"huaweitit-al00",
"huawei g750-t01",
"stf-al00",
"oppor11st",
"vie-al10",
"dli-al10",
"samsung sm-g9280",
"coolpady803-9",
"huawei g7-tl00",
"lex820",
"huawei ale-cl00",
"bln-tl10",
"samsung sm-c5000",
"gn9010",
"hm 1s",
"m6note",
"huawei rio-tl00",
"minote3",
"redmi5plus",
"kiw-tl00",
"alp-al00",
"huaweivns-al00",
"plk-al10",
"le x820",
"mx5",
"huawei rio-ul00",
"lon-al00",
"m5s",
"cun-tl00",
"mi 3s",
"m1e",
"oppo r9km",
"gionees10l",
"gn8001",
"m1 e",
"f5",
"scl-tl00",
"4g",
"lex520",
"vivox6splusd",
"1501_m02",
"huaweitit-tl00",
"lex528",
"mi5s",
"vivoxplay6",
"m2",
"samsung sm-a5000",
"gn5005l",
"vivoy37",
"oppoa77t",
"mi 2",
"vivoy53",
"vivoy33",
"mi5splus",
"1605-a01",
"vivoy35a",
"kiw-tl00h",
"samsung sm-a8000",
"scl-al00",
"oppor9km",
"ath-al00",
"mx4 pro",
"pic-al00",
"sm-c5000",
"samsung sm-c7000",
"m651cy",
"huawei p7-l09",
"m2e",
"jmm-al00",
"r7plus",
"sm-c7000",
"oppo r7splus",
"huaweimt7-tl10",
"sm-g9280",
"m1note",
"trt-tl10a",
"r8207",
"mya-al10",
"oppor7splus",
"che-tl00h",
"mx6",
"samsung sm-g9200",
"chm-tl00h",
"f106",
"huawei g7-ul20",
"samsung sm-g9250",
"gionees10cl",
"plk-tl01h",
"gn3001",
"redmi 4a",
"knt-al10",
"redmi pro",
"oppor11pluskt",
"sm-g9250",
"f105",
"huawei nxt-cl00",
"mla-al10",
"nce-al10",
"bkl-al20",
"sm-a7000",
"rio-al00",
"huaweinxt-tl00",
"oppor11splus",
"1505-a01",
"rne-al00",
"vivox9plusl",
"mix2",
"edi-al10",
"redmi 3x",
"scl-tl00h",
"eva-tl00",
"h60-l01",
"mi 3w",
"x600",
"xiaomihm2a",
"cam-tl00h",
"huawei p8max",
"pra-tl10",
"gionees10c",
"gn9012",
"vivoy27",
"vivoy51tl",
"hwi-al00",
"lex621",
"hisense m20-t",
"mts-t0",
"vivoy66ia",
"sm-g9550",
"knt-al20",
"bla-al00",
"lex626",
"le x528",
"1607-a01",
"mi 2s",
"vivox5sl",
"chm-tl00",
"mi 3c",
"konkad6+",
"vivox20plusa",
"vivox6plusa",
"trt-tl10",
"gioneem7",
"redmipro",
"gn5001",
"c106-9",
"vivox5max+",
"2014501",
"vivoy53l",
"che1-cl10",
"jmm-al10",
"vivoy13l",
"huawei tit-cl10",
"vivoy75a",
"oppoa79",
"vivox6l",
"huawei c199",
"sm-j5008",
"mi2",
"oneplus a3000",
"che1-cl20",
"sla-tl10",
"f100a",
"zteba510",
"sm-a8000",
"pro 5",
"huaweivns-tl00",
"pro 6",
"vivoy79a",
"oneplus a3010",
"oppor11plusk",
"lenovo k30-t",
"gioneegn5007",
"ck3-01",
"mi3",
"samsung sm-g5500",
"oppoa73",
"a51",
"go n3s",
"oppoa59st",
"od103",
"coolpad8722v",
"mi 4c",
"lex720",
"bestsonnylt999",
"hm1s",
"4g+",
"nce-al00",
"coolpady91-921",
"vivoy13il",
"20161220",
"sm-g5500",
"sm-a5000",
"nexus 4",
"dig-tl10",
"mz-m3 note",
"oppoa83",
"sm-g9500",
"huaweimt7-cl00",
"samsung sm-a7100",
"huaweimt7-tl00",
"sm-c9000",
"redmi3x",
"kiw-ul00",
"ob-oppo a31c",
"redmi5a",
"a31c",
"kopol9",
"m623c",
"xiaomimi4lte",
"koobees301t",
"gt-n7100",
"minotepro",
"sm-n9006",
"chm-cl00",
"knt-ul10",
"c106",
"che-tl00",
"oneplusa5000",
"ale-ul00",
"vivoy66i",
"1107",
"sm-g6000",
"a11",
"mt7-cl00",
"sm-j7008",
"m571c",
"huaweigra-ul10",
"mx4",
"minote2",
"xiaomi2014813",
"huaweigra-tl00",
"huawei b199",
"xiaomimi3",
"1503-a01",
"che2-tl00m",
"ale-tl00",
"m621c",
"xiaomi2014501",
"g621-tl00",
"zh-cn;gionee-gn5001s/gn5001s",
"cam-ul00",
"sm-a9000",
"coolpadb770",
"gn9011",
"sm-g9200",
"m6",
"samsung sm-a9000",
"bnd-al00",
"chm-ul00",
"lex622",
"huawei vns-dl00",
"was-tl10",
"r7007",
"huawei eva-al10",
"eva-dl00",
"fig-al10",
"sm-n9008v",
"pe-tl10",
"hisense m30",
"pe-tl20",
"huaweirio-tl00",
"huaweirio-ul00",
"sm-g5308w",
"scl-cl00",
"zteba601",
"che2-tl00",
"a31t",
"2014811",
"huawei crr-cl00",
"vivox3l",
"2014011",
"nem-tl00",
"sm-n9100",
"8676-a01",
"mi5c",
"huaweicrr-ul00",
"gn8003l",
"sm-a7100",
"sm-g900p",
"bac-tl00",
"che2-ul00",
"huawei cun-al00",
"mi3w",
"samsung sm-g9300",
"nce-tl10",
"mz-m1 metal",
"gionees10bl",
"gionees10b",
"mt7-tl00",
"gn9006",
"vivox5l",
"mt7-tl10",
"bln-al30",
"pro6",
"mx4pro",
"hw-pe-cl00",
"huaweinxt-dl00",
"koobees305m",
"samsung sm-n9100",
"dli-tl20",
"koobees106m",
"huawei c199s",
"gioneem7l",
"huaweip8max",
"lephonet9+",
"android7.0;mha-al00",
"zukz2131",
"lephonet6+v",
"oppoa79t",
"1711-a01",
"m1",
"lephonet10",
"3007",
"yl-coolpad8722v",
"nx549j",
"gn8002",
"en-us; sm-n900t",
"1603-a03",
"hw-huawei ale-cl00",
"nx531j",
"nx529j",
"nem-ul10",
"nem-tl00h",
"1505-a02",
"gn3002",
"zh-cn;mha-al00",
"gn152",
"le x520",
"1501-a02",
"zh-cn;gionee-f100l/f100l",
"zh-cn;oppor9s",
"huawei caz-tl10",
"bnd-tl10",
"zh-cn;gionee-f100/f100",
"zh-cn;vivox9",
"mi 4s",
"doovv11",
"zh-cn;vivox7",
"r2017",
"huawei sc-ul10",
"m653",
"mi pad",
"xiaomiredmi3",
"zteba610t",
"sm-g9008v",
"vivoy79",
"samsung sm-g6000",
"gioneegn5007l",
"pro5",
"mz-m2 note",
"mz-m5 note",
"vivoy75",
"mi 4w",
"huaweivns-dl00",
"oppor9plusma",
"sm-j3119",
"iphone 6",
"u20",
"x9007",
"sm-j3110",
"ob-oppo r7c",
"huaweitit-cl10",
"sm-j3109",
"x900+",
"kopot9",
"8676-m01",
"kopol6",
"samsung sm-n9200",
"mix",
"xiaomimi2s",
"huaweip7-l07",
"t1",
"vtr-tl00",
"vivoy37a",
"sm-n9500",
"kiw-cl00",
"xiaomimi-4c",
"huaweimla-tl10",
"zh-cn;mi6",
"huawei gra-cl10",
"oneplusa5010",
"mediapad",
"oneplusa3010",
"vivoy29l",
"m3max",
"android4.4.4;a31",
"vivoy28l",
"mi 2sc",
"kingsun-f9",
"os105",
"ple-703l",
"le x621",
"sm-n9200",
"xiaomihm1s",
"vivoy13",
"honor h30-l01",
"zh-cn;gem-703l",
"zteba910",
"coolpady803-8",
"hmnote1td",
"huawei mla-al00",
"coolpady72-921",
"kopo l9",
"sm-g9300",
"huaweigra-ul00",
"vivoxplay3s",
"huawei c8818",
"galaxynexus",
"2014812",
"huaweig750-t01",
"oppor9t",
"oppor9splust",
"galaxy nexus",
"h60-l03",
"mp1602",
"android7.0;eva-al10",
"oppor9skt",
"huaweig7-tl00",
"lld-al10",
"yuflyf9",
"zteba520",
"huawei mla-tl00",
"android7.0;frd-al10",
"zh-cn;mz-m5note",
"vivox710l",
"mi4s",
"lenovo a2580",
"samsungsm-g9350",
"vivox6plusl",
"mi3c",
"huaweicaz-tl10",
"iphone 5sglobal",
"coolpad8675-a",
"xiaomi2014011",
"nexus6",
"sm-n9009",
"vivox5prov",
"r831s",
"sm-n9002",
"hisensef22",
"huaweiale-cl00",
"gra-ul10",
"lephonew7+",
"rio-tl00",
"oppoa83t",
"coolpad8737",
"pro6plus",
"sugary9",
"pro6s",
"lenovo k50-t5",
"android7.0;bln-al10",
"zh-cn;oppor11",
"oppoa30",
"iphone 6p",
"bft26",
"votogt11pro",
"lephone t6+v",
"zh-cn;oppoa57",
"zteba603",
"lephonet708v",
"android4.4.4;2014813",
"r8007",
"sm-n9008s",
"lephone t7+",
"iphone 6s",
"plk-ul00",
"lenovok30-t",
"huaweigra-cl00",
"vivoy937",
"nx523j_v1",
"pro7-s",
"frd-dl00",
"android5.1.1;r7plusm",
"m3x",
"vivov3max",
"zh-cn;duk-al20",
"lex625",
"samsung sm-c9000",
"votogt07",
"lenovoa3860",
"huawei rio-cl00",
"wp",
"lenovo a320t",
"zh-cn;huaweimla-al10",
"lenovoa7600-m",
"aloes",
"oneplusa3000",
"oysinmx7",
"sm-g9208",
"huawei g628-tl00",
"android6.0;cam-al00",
"vivoy913",
"sm-a9100",
"hisense m30t",
"u10",
"m821",
"x9",
"coolpady82-520",
"od105",
"ztebv0701",
"1603-a02",
"s2",
"nx541j",
"lovme-t23",
"hisense f22",
"m611d",
"btv-w09",
"honor h30-l01m",
"sm-a5100",
"c8817d",
"mi 3x",
"btv-dl09",
"mi 4a",
"coolpad5270",
"sm-g7200",
"vivoy923",
"sm-g6100",
"huawei sc-cl00",
"android6.0;nem-al10",
"zh-cn;huaweinxt-al10",
"sm-c7010",
"nexus 5",
"h60-l11",
"m57ac",
"huawei c8816",
"xiaomimi5",
"sop-n1",
"yepen",
"sm-g5510",
"vivox6splusa",
"f106l",
"coolpady75",
"android5.1;gn5001s",
"got5",
"w909",
"mya-tl10",
"1503-m02",
"mi4w",
"oppo a30",
"sch-i939",
"zteba611t",
"zh-cn;frd-al10",
"hm-i506-tl",
"huaweinxt-cl00",
"lenovo a360t",
"stf-tl10",
"koobees106",
"plk-tl00",
"htc d816t",
"8298-m02",
"sm-j5108",
"nx563j",
"zh-cn;vivox20a",
"20151209t",
"vivoy18l",
"mi4c",
"oppoa73t",
"nx569h",
"sm-g7106",
"oppoa33t",
"m631",
"huawei eva-al00",
"samsung sm-a9100",
"xiaomi2014812",
"m578c",
"sm-g9008w",
"sm-g7508q",
"lenovo a3800-d",
"xiaomi2014811",
"lephonet11",
"huaweicaz-tl20",
"h60-l02",
"mp1503",
"zh-cn;mz-m2note",
"zukz2121",
"huaweig7-ul20",
"r7c",
"x7",
"2014112",
"samsung sm-a5100",
"pe-cl00",
"huawei p7-l00",
"ztebv0730",
"oppo r9st",
"m6splus",
"bestsonnylt558",
"v183",
"huawei c8816d",
"s9l",
"yq601",
"oppo r9t",
"lephonet16",
"zukz1",
"coolpad8675",
"gn5002",
"x800",
"rv:52.0) gecko",
"ma5",
"nxt-tl00",
"lephonew9",
"zh-cn;gionee-gn8003/gionee-gn8003",
"zh-cn;oppor9m",
"lenovo a3860",
"zh-cn;mz-m1metal",
"sm-n9008",
"lld-al00",
"zh-cn;gionee-gn5005/gionee-gn5005",
"gra-tl00",
"c106-8",
"gra-cl00",
"mha-tl00",
"a0001",
"coolpad9190l",
"m636",
"sm-t805c",
"xiaomimi2sc",
"koobees302m",
"uoogou",
"n5207",
"ta-1000",
"8681-m02",
"ob-oppo 1105",
"hisensem20-t",
"lephonet2v",
"huawei c8817e",
"duk-tl30",
"sm-n9108v",
"r6007",
"sm-t715c",
"samsung sm-j5008",
"android4.4.4;2014811",
"1801-a01",
"vivox20plus",
"zh-cn;mi5",
"redmi5",
"lenovok50-t5",
"gt-i9500",
"a31u",
"huaweimla-al00",
"hw-huawei y635-cl00",
"oppor11splust",
"r8107",
"coolpad8297-t01",
"hw-huawei p7-l09",
"oppoa79k",
"huaweip7-l09",
"oppo a37t",
"xiaomi2013022",
"vivox5v",
"vivoy22l",
"huawei y560-cl00",
"zh-cn;mz-m3note",
"p7-l07",
"pe-tl00m",
"mz-y685c",
"vivox9splusl",
"p7-l09",
"2013022",
"6607",
"pic-tl00",
"android5.1;sm-j5008",
"konka509",
"n5117",
"yusuna9",
"gn151",
"android5.1;gn3003",
"zh-cn;gionee-gn5003/gionee-gn5003",
"sm-t555c",
"samsung-sm-n9009",
"ivvif2-t",
"mipad",
"sm-t550",
"gem-703l",
"samsung sm-n9008v",
"vivox7l",
"vivoy927",
"8692-a00",
"w900s",
"doova8",
"huaweib199",
"q7",
"note4x",
"gionee-gn5003/gionee-gn5003",
"hm 1sc",
"m621c-s",
"sm-a7108",
"asus_z012da",
"hw-huawei c199",
"vivos7i(t)",
"huaweitag-cl00",
"asus_z00ld",
"hw-huawei c8816",
"8681-a01",
"android5.1.1;h60-l01",
"jxd-t55",
"zh-cn;vie-al10",
"g750-t01",
"mi2sc",
"p1",
"vivoy613f",
"vivoy928",
"htcone801e",
"xt1650-05",
"huawei y635-cl00",
"hw-huawei c8818",
"zh-cn;oppor11s",
"gt-n7108",
"ax9",
"coolpady71-711",
"gionees11",
"lenovoa3910t30",
"lenovoz90-7",
"hm1sw",
"goc3",
"android6.0.4;sm-n920g",
"s6",
"vivoy627",
"huawei y635-tl00",
"lenovoa708t",
"samsungsm-a8000",
"lenovoz90-3",
"htcd816t",
"coolpad5360",
"zh-cn;oneplusa5000",
"huaweiy560-cl00",
"f3115",
"android6.0;la-x7",
"tetc-v5",
"doova11",
"y51a",
"gt-n7102",
"mz-mx4",
"android6.0.1;nx531j",
"android7.0;sm-g9308",
"x900",
"kopol7",
"lenovo a2800-d",
"android6.0;dig-tl10",
"htcd816w",
"lephone t2v",
"samsungsm-n9006",
"kopol1",
"gt-i9082i",
"yoordp8",
"zh-cn;lex620",
"auxt5100l",
"hisensee76",
"votogt2017",
"md6",
"m463c",
"votogt7",
"huawei vie-al10",
"zh-cn;gionee-gionee_s10/s10",
"sch-i679",
"kopok33",
"android6.0.1;sm-g9200",
"ob-oppor7c",
"sm-g9009d",
"android6.0.1;nx549j",
"kopok11",
"coolpad8720l_cmcc_td",
"android6.0.4;sm-n910g",
"et600",
"xiaomimi3w",
"g0215d",
"android4.4.4;c8817d",
"yl-coolpad5360",
"f3",
"samsungsm-a9000",
"sch-i869",
"a7",
"android5.1;x5",
"android4.4.3;4g-plus",
"zh-cn;vivoy66",
"best_sonny_lt533",
"android5.1;zh-cn;gionee-gn9010/gn9010",
"bkl-al00",
"lenovoa688t",
"boway_x6",
"samsungsm-j5008",
"xiaomimi3c",
"android6.0;m5",
"vivoy53n",
"hw-huawei gra-cl00",
"samsungsm-c5000",
"android6.0;coolpad8297",
"huaweisc-ul10",
"sm-g930f",
"sop-n9",
"n09",
"hw-huawei mt7-cl00",
"android5.1;1501-a02",
"zh-cn;oppor11t",
"t1-823l",
"android5.1.1;sm-n9100",
"gionee-f5/f5",
"lenovos60-t",
"huaweiy635-cl00",
"la-s1",
"lenovoa3910e70",
"doovl5m",
"android5.1;m5",
"android6.0;zh_cn;x600",
"t1-821w",
"mytel",
"hlj-xm-e",
"huaweig730-u00",
"android5.1;wp-s",
"sm-a7009",
"2014821",
"r821t",
"g628-tl00",
"sm-g7109",
"huaweig610-t00",
"android4.4.2;che2-ul00",
"gt-i9508v",
"p9",
"lenovo k32c36",
"android7.0;eva-al00",
"samsungsm-c7000",
"huaweiy635-tl00",
"lenovo k50-t3s",
"android6.0.1;kiw-al10",
"android4.4.4;6607",
"android6.0.1;sm-c5010",
"sm-n9150",
"huaweirio-cl00",
"rlt",
"coolpad8908",
"android5.1.1;sm-a7100",
"ivviv1",
"android5.1.1;scl-tl00h",
"android5.1.1;jxd",
"sm-c5010",
"xx-xx;pe-tl20",
"xiaomiredmi3s",
"doovl8plus",
"sm-t231",
"lenovoa355e",
"doovl9",
"nexus 5x",
"gt-i9508",
"coolpad8105",
"3005",
"s8-701u",
"vivoy51n",
"hw-kiw-cl00",
"sm-g9009w",
"android5.1;a1p",
"u16",
"lenovo k51c78",
"zh-cn;mz-mx6",
"oukip2",
"coolpady71-511",
"android5.0.2;plk-al10",
"gra-cl10",
"lenovox3c50",
"bowayu12",
"birdl902",
"iph8",
"android5.1;8681-m02",
"hw-huaweitag-cl00",
"huawei m2-801w",
"zh-cn;vtr-al00",
"doovl9mini",
"huawei m2-803l",
"hs-hisensef20t",
"android5.1;full_hct6753_35gc_l1",
"coolpady83-i00",
"t1-701u",
"sm-e7009",
"android6.0.1;sm-g9300",
"android6.0;gn5005l",
"huawei a199",
"android5.1;w900s",
"xiaomiredmi4",
"xiaomimi2a",
"v3",
"a33",
"lenovoa7600",
"doovm1t",
"android4.4.4;a11",
"android6.0;knt-al20",
"x17.0",
"x7plus",
"samsungsm-c9000",
"doovm2",
"h9s",
"android5.1;x6",
"gionee-gn9010/gn9010",
"e6853",
"gt-i9502",
"la-s35",
"hisense e70-t",
"sm-w2015",
"m681c",
"onea2001",
"k-touch2a",
"htc m8st",
"zh-cn;vivox9l",
"gra-ul00",
"goc1",
"sm-g7108v",
"coolpad8017-t00",
"android5.1;hlj-gm-q1",
"android4.4.2;sm-n900",
"eyut5",
"zh-cn;k-touchh2",
"k10e70",
"htc_d728x",
"huaweip6-c00",
"android4.4.2;x9007",
"doovl3)applewebkit",
"vk7plus",
"m355",
"c1",
"htc m8t",
"android5.1.1;u22",
"android5.1;uoogou",
"xiaomimi2",
"lenovos898t",
"lenovox2-to",
"oysinx5",
"yl-coolpady72-921",
"sastsa9",
"gt-s7562c",
"k-touchx7",
"android4.3;gt-i9158v",
"android4.4.4;sm-g5309w",
"xiaomiredmi4a",
"coolpad7296",
"m3 max",
"zh-cn;gionee-gn9012/gn9012",
"m199",
"sintaves1000",
"android5.0.2;m821",
"android6.0;c1",
"uoogout10",
"gionee-gn5001/gn5001",
"p8max",
"noainx9v",
"nx512j",
"android4.4.2;sm-g9008v",
"huaweip7-l00",
"huaweig6-c00",
"6000",
"a525",
"lenovo p1c72",
"noainx9plus",
"y09",
"vivox710f",
"hisensef30",
"koomii-k8",
"android6.0;m361",
"zh-cn;gionee-gn8002s/gionee-gn8002s",
"lenovos820",
"noainx9",
"android7.0;trt-al00",
"lenovop70-t",
"lovme-t17",
"android4.4.4;sk1-02",
"gn9000l",
"koomii-k19",
"coolpad7105",
"zh-cn;mz-mx5",
"x9077",
"lenovok32c30",
"xt1635-03",
"asus_x008",
"sk3-01",
"android4.4.2;chm-tl00",
"gionee-gn8001/gn8001",
"gt-s7572",
"8298-a01",
"lphone6splus",
"sch-i619",
"android4.4.4;2014112",
"oppor7plus",
"u5483",
"r3",
"coolpad5380ca",
"oppo a33t",
"android5.0.2;x600",
"meizu3slet",
"lenovoa3900",
"vivox5maxs",
"lenovo p70-t",
"android5.1;??",
"sm-g900f",
"android6.0.1;sm-j7108",
"x909t",
"a1601",
"android5.0;sm-n9005",
"zteq529t",
"android5.1;mz-m3",
"asus_x002",
"g115",
"android6.0.1;m836",
"owwo1s",
"coolpad7320",
"birdd10",
"lenovok52e78",
"sch-p709",
"gt-i9300i",
"android5.1;t1",
"android6.0;asus_x008",
"ob-oppo1105",
"r5",
"huawei+nxt-al10",
"r831t",
"huawei mla-tl10",
"android5.1.1;sm-w2016",
"android4.4.4;sm-g8508s",
"huaweicrr-ul20",
"coolpad9976t",
"s3",
"android6.0;sm-a7108",
"lenovop1c72",
"d51732",
"yl-coolpadck2-01",
"zh-cn;yl-coolpad5263",
"sm-c7100",
"koobees9",
"huawei mla-ul00",
"android5.1;ck3-01",
"gt-i9300",
"la-x7",
"android4.4.4;4g",
"android5.0.2;f103l",
"coolpad8717",
"tetc-f5",
"android7.0;btv-w09",
"haipainobles6",
"lenovop1c58",
"coolpadv1-c",
"sm-g9006w",
"coolpad7251",
"gt-i8268",
"y07",
"android5.1.1;scl-tl00",
"zh-cn;pra-al00x",
"e6653",
"huaweiy523-l176",
"android6.0;u10",
"android5.1;r7kf",
"lenovok3",
"g123",
"lenovoa320t",
"zh-cn;redmi4",
"k-touchx11",
"gt-i9507v",
"coolpad7605",
"vivoy613",
"gionee-f100a/f100a",
"zh-cn;bln-al40",
"doovl5pro",
"gem-703lt",
"sm-a5108",
"hisense f20t",
"android5.1;m3",
"android5.0.1;gt-i9508",
"xiaomimi4c",
"lenovoa5500",
"2016088",
"coolpad5952",
"android5.0;sm-g9009w",
"zh-cn;gionee-gionee_s10c/s10c",
"birdl5",
"koobees305",
"huawei mt2-l01",
"android4.3;gt-n7100",
"yl-coolpad5263s",
"xshitoup7",
"sm-w2014",
"scl-tl00_td",
"konka d557",
"android5.1;m571c",
"huaweinem-tl00",
"n1",
"noainx15",
"u19",
"i7",
"android6.0;1505-a01",
"android5.1.1;nx523j_v1",
"sm-n7508v",
"android4.3;r2017",
"g13",
"android5.0.1;gt-i9508v",
"mipad3",
"nts-al00",
"coolpad8730l",
"mipad2",
"laaboov9",
"x608",
"bf_a500",
"android4.4.4;2014812",
"zh-cn;gionee-gionee_s10cl/s10cl",
"coolpadb770s",
"kingsun-f",
"doovv15",
"android6.0.1;c106-6",
"zh-cn;sm-g9550",
"r830s",
"bm006",
"huawei c8813q",
"android5.1;la-s5",
"android4.4.2;sm-n9009",
"nx508j",
"4gvolte",
"lephonef1",
"android7.0;vky-al00",
"android6.0.1;c106-7",
"zh-cn;gionee-gionee_s10l/s10l",
"xiaomimi4s",
"h30-c00",
"p6-c00",
"sch-i699i",
"coolpad8297-c00",
"oppo r7st",
"hs-hisensef22",
"lovme-t26",
"y51",
"mz-mx5",
"oppo r7t",
"android6.0.1;sm-g9250",
"android6.0.1;c1530l",
"android6.0;scale",
"samsung-sch-i959",
"android6.0;y21",
"yl-coolpad8675-a",
"lovme-t19",
"coolpad8721",
"android4.4.4;w900",
"zh-cn;1605-a01",
"noaint01",
"gm",
"bf_t20",
"birdl802",
"huawei c8815",
"xt1710-08",
"zh-cn;pra-al00",
"huaweimt2-l01",
"huawei mt7-ul00",
"samsung sm-g9006v",
"vivoy17w",
"noainr9s",
"f8332",
"koobees103",
"android5.1.1;chm-tl00",
"k30-t",
"lovme-t16",
"huaweisc-cl00",
"y71-511",
"4lte",
"lenovoa368t",
"android4.4.4;a31c",
"coolpad8729_cmcc_td",
"laaboov3",
"hht6a",
"koobeem9",
"mz-m3s",
"lenovo s60-t",
"android5.1;cun-tl00",
"android5.1.1;ath-al00",
"honorh30-l01m",
"coolpads6-nt1",
"huawei nce-al10",
"android4.4.2;che-tl00",
"mz-mx4pro",
"doovv3",
"note4",
"r8000",
"x7(20160103)",
"android6.0;plk-tl01h",
"android4.4.2;h60-l11",
"hw-huaweic8818",
"honorh30-l01",
"android4.4;g621-tl00",
"sensation",
"huaweimla-ul00",
"samsung-sm-a5009",
"mz-m6note",
"y685c",
"lephonet708s",
"vivox5prol",
"samsung-sm-a7009",
"huaweieva-al10",
"huaweimla-tl00",
"a165",
"sk1-02",
"kingsun-f4",
"mozilla",
"sm-n7506v",
"sm-n9005",
"huawei nem-tl00",
"android6.0.1;ath-cl00",
"samsungsm-g930f",
"gm-q5+",
"gn3002l",
"s120",
"gt-i9158v",
"nexus 6",
"huaweic8813q",
"note1s",
"hd1",
"samsung",
"doovv5",
"ztec880s",
"android5.1;m578ca",
"android4.4.4;uoogou",
"samsungsm-g935f",
"lgtd-x3l",
"coolpad5263",
"zh-cn;vivoy67",
"samsung-sm-g7108v_td release",
"zh-cn;   ",
"android6.0.1;zh_cn;lex720",
"zh-cn;vivoy67a",
"note1lte",
"doovc9",
"zh-cn;alp-al00",
"sm-t311",
"nexus 6p",
"android6.0;1503-m02",
"zh-cn;vivox7plus",
"lovme",
"x1",
"android4.4.4;g621-tl00",
"android5.1;cun-tl00;",
"jkla165",
"yl-coolpad8676_a01",
"meizus6",
"r7",
"birdl3",
"mz-m57ac",
"zh-cn;bln-al10",
"gt-i9152",
"nexus 7",
"gm-w",
"gt-i9168i",
"gm-t1",
"coolpady70-c",
"samsung-sm-g9009d",
"android6.0;pe-tl10",
"lenovok30-e",
"samsung-sm-g9009w",
"zh-cn;redmi3s",
"sm-t800",
"hisensee70-t",
"android6.0;gn8003l",
"y71-711",
"s1pro",
"v188s",
"android4.4.2;nx507j",
"p7-l00",
"r7005",
"p780",
"samsung-sm-g9209",
"android6.0;1603-a03",
"a33m",
"p1c72",
"android5.1;v3",
"zh-cn;vivox9i",
"lenovoa6000",
"n5209",
"huaweim2-803l",
"p7-l07_td",
"sm-e7000",
"nexus one",
"android6.0;eva-al10",
"zh-cn;oppoa57t",
"p8",
"huaweim2-801w",
"sm-g925a",
"android6.0;s9",
"android6.0;uoogou",
"a59s",
"nexus11",
"coolpad5263cs",
"sm-g3518",
"zh-cn;plk-al10",
"zh-cn;mi5x",
"hisensef23",
"samsung-sm-j3119",
"n918st",
"coolpad7620l",
"a59m",
"x6",
"samsung-sm-j7109",
"y21",
"android6.0;cam-tl00h",
"sm-g9508",
"uoogouf5",
"huawei nxt-ul00",
"huawei;zh_cn;applewebkit",
"zh-cn;mi5s",
"lenovoa768t",
"kingsun-f70",
"android6.0;ar9",
"zh-cn;4g+",
"v3maxa",
"samsung-sm-n9008v_td release",
"android6.0;knt-ul10",
"mz-m2e",
"zh-cn;mz-m3s",
"mlledl9",
"noaina1",
"samsung-sm-n9109w",
"android5.1;opsson_v6",
"android5.0.1;mx5",
"gionee-gionee_s10c/s10c",
"sm-n9208",
"g7-ul20",
"sm-a5009",
"huaweip6-u06",
"vivox3f",
"android4.4.4;sm-g5108",
"plk-cl00",
"android5.0.2;sm-a7009",
"ztebv0710",
"la-s33",
"huawei p6-c00",
"lenovoa936",
"cpn-w09",
"android4.3;r6007",
"s8-701w",
"android6.0.1;sm-n9109w",
"android5.1;8298-m02",
"android6.0;samsung-sm-g925a",
"xiaomimi5s",
"fig-tl10",
"vivox3sw",
"android5.1;wp",
"zh-cn;vky-al00",
"sm-g7108v_td",
"hw-che1-cl10",
"android4.4.4;shown_p1",
"android4.4.2;gt-i9500",
"android6.0;samsung-sm-g920a",
"cpn-al00",
"huawei p6-t00",
"android4.3;r7007",
"hw-chm-cl00",
"lenovo s810t",
"android6.0.1;kiw-cl00",
"samsung-sm-w2016",
"android5.1.1;nx511j",
"android5.1;gn9008",
"yl-coolpad8297-c00",
"zh-cn;bnd-al10",
"u22",
"zh-cn;mimax",
"mz-m3",
"fig-al00",
"biheea8+",
"asus_z00ad",
"android5.1;cun-al00",
"zh-cn;gionee-f100a/f100a",
"gt-n5100",
"jxd",
"zh-cn;vivoy51a",
"5",
"coolpad8705",
"lnv-lenovoa360e",
"sm-g5700",
"coolpad5890",
"android5.1.1;sm801",
"huaweince-al10",
"hlanx",
"android6.0;x7(20160103)",
"a37m",
"gt-s7568",
"vivoy22il",
"tclp588l",
"samsungsm-n910u",
"zh-cn;yl-coolpad5263s",
"x9plus",
"zukz2151",
"sc-03d",
"k-touchtouch3",
"android7.0;frd-al00",
"android6.0;4g",
"doovl3c)applewebkit",
"n958st",
"coolpadsk1-01",
"vivox6splus",
"samsung sm-g930f",
"mz-m1 e",
"samsungsm-g5500",
"android5.1;m578c",
"android4.4.4;bestsonny_lt988",
"android7.0;sm-g9550",
"f6",
"huaweic8817l",
"r830",
"7plus",
"mz-m1 note",
"zh-cn;dig-tl10",
"hlanote1-l",
"mla-ul00",
"c730lw",
"coolpad5367c",
"zh-cn;redmi4x",
"zh-cn;vivoy51",
"lenovoa880",
"sm-g5306w",
"android4.4.4;m623c",
"zh-cn;mi4lte",
"mt2-l01",
"gt-i9505",
"sagam7",
"oppo;zh_cn;applewebkit",
"android5.1.1;a51kc",
"yl-coolpad8297-t01",
"h9",
"android4.4.4;kingsun-f",
"android6.0;f100l",
"android4.4.4;a31u",
"android5.1;mytel",
"yl-coolpady76",
"h8sm",
"sm-g5520",
"asus_z00ed",
"oppog7788",
"lenovos850t",
"onefivec3",
"uoogou-t8",
"htc_d816x",
"android6.0;f100s",
"android4.4.4;p2",
"lephonea7+",
"cp8298_i00",
"gn9005",
"h8s",
"s03",
"android5.1.1;scl-cl00",
"android4.4.4;n958st",
"android5.1.1;nx510j",
"android5.1;gm-q5",
"zh-cn;nem-al10",
"lenovo s850t",
"android4.3;zh-cn;gionee-gn9005/gn9005",
"android6.0;mts-t0",
"sagaa908",
"ss2-01",
"yl-coolpady891",
"p6-u06",
"gucci",
"android6.0.1;kiw-ul00",
"android6.0;vie-al10",
"samsungsm-n9100",
"sm-g5109",
"zh-cn;bkl-al20",
"readboy_g90",
"gm-t6",
"vivoy20t",
"android4.4.2;pe-cl00",
"android4.4.4;sm-g5109",
"max",
"android6.0.1;sm-j5108",
"yl-coolpada8-930",
"zh-cn;dig-al00",
"5s",
"vivoy19t",
"android4.4.2;2014011",
"android5.1;x-apple",
"android5.1;h8s",
"ivvi i3-01",
"zh-cn;gionee-s9/s9",
"la2-sn",
"sph-m840",
"k50-t5",
"get",
"gt-i9158",
"hisensef22m",
"android4.4.4;sk3-01",
"android4.4.2;pe-tl00m",
"sm-t2519",
"htcm8st",
"20170608s",
"nx505j",
"la2-s",
"android5.1;m681c",
"oppo+r9tm",
"nexusone",
"android6.0.1;kiw-tl00",
"jmm-tl10",
"gt-i9082c",
"sm-g935f",
"r9splus",
"aeq1",
"ar9",
"android5.1;4g",
"r7plust",
"android6.0;r5",
"hyf",
"ags-l09",
"android5.1.1;nx529j",
"r9sk",
"sm705",
"hmnote1ltew",
"sm-g7108",
"android4.4.2;pe-tl10",
"android6.0.1;sm-a5100",
"zh-cn;oppor9sk",
"android4.4.4;chm-cl00",
"android6.0;eva-al00",
"android5.1;x9",
"zh-cn;sm-g9350",
"zh-cn;h60-l01",
"oppo+r9s",
"vivoy17t",
"sm-a3000",
"android5.1;mz-m2",
"yl-coolpady1",
"owwo7s",
"huaweic8950d",
"ivvi ss1-01",
"hw-scl-cl00",
"gionee-gionee_s10l/s10l",
"oppo+r9m",
"lenovo s898t",
"android6.0;mx6",
"zh-cn;oppoa59s",
"sm-p350",
"lenovo s898t+",
"android4.4.2;pe-tl20",
"zh-cn;mz-m1e",
"vivoy15t",
"ivvi ss1-03",
"hol-t00",
"r2010",
"android6.0;f5",
"mz-m1e",
"gionee-gn9011/gn9011",
"xiaomihm1sc",
"gt-i9082",
"koobee s301t",
"android5.1.1;scl-al00",
"coolpad8712;android",
"go50023",
"konkas1",
"lephone t2",
"coolpad8712_cmcc_lte",
"gt-i8552",
"gionee-f100l/f100l",
"vivoy13t",
"mz-mx4 pro",
"android4.4.4;r7t",
"mz-m1note",
"android6.0.1;ath-ul00",
"xiaomihm1sw",
"android4.4.2;h60-l01",
"huaweigra-l10",
"zh-cn;oppoa59m",
"r9plusma",
"g666",
"owwoq8",
"huaweigra-l09",
"android6.0.1;sm-c7000",
"zteba602",
"fdr-a03l",
"got3",
"lenovo s90-t",
"p6-t00",
"tclp316l",
"lenovo a2860",
"android6.0.1;sm-g9350",
"android4.3;sm-g7106",
"eyut11",
"fdr-a01w",
"htcm8sw",
"gionee-f100/f100",
"haipainobles3",
"xbs",
"mz-pro5",
"lenovos90-t",
"mlledr9",
"gon3s",
"nx510j",
"20160829s",
"mz-pro6",
"sm-g920a",
"android4.4.4;sm-a7000",
"yl-coolpadt2-00",
"bft61",
"p1c58",
"sa8",
"lenovo x3c50",
"android4.4.4;m1",
"android4.4.3;k2-l",
"coolpady90",
"android6.0;f100b",
"coolpady891",
"mz-pro 5",
"linuxx86_64)applewebkit",
"android7.0;sm-g9300",
"noainx7",
"sm-g3502i",
"mz-pro 6",
"android4.4.4;readboy_g90",
"zh-cn;gionee-gn9010/gn9010",
"mt7-tl00_td",
"x9000",
"koobee s9",
"common",
"android6.0.1;sm-a7100",
"bft19",
"android5.1.1;sm-j3109",
"yl-coolpad5956",
"mt7-tl10_td",
"r8205",
"xt1570",
"lephone t708",
"la-s7",
"virtualmachine2",
"lenovoa858t",
"lenovopb2-670n",
"lephone t708v",
"android5.1;r9",
"comiot9",
"coolpad5891q",
"c03",
"android6.0;f106",
"zh-cn;mz-m6note",
"sop-m3",
"xshitou-nt18",
"zh-cn;m3note",
"doovt21",
"coolpady82-820",
"yl-coolpadt2-c01",
"lenovoa3800-d",
"huawei crr-ul20",
"android7.0;vtr-tl00",
"coolpad7620l-w00",
"vivoy11it",
"android5.1.1;sm-j3110",
"android5.1.1;sm-g5309w",
"ipad4,1) applewebkit",
"android5.1;4g+",
"vky-tl00",
"t1-a21w",
"coolpady80d",
"ts550",
"zh-cn;sch-n719",
"android5.1.1;sm-j3119",
"samsungsm-g6000",
"ipad4,4) applewebkit",
"android5.1;uoogou-t8",
"eyut7",
"htcd820ts",
"coolpad7722",
"noain x9v",
"samsungsm-n9500",
"hmnote1w",
"sm-n7508v_td",
"lephone w2",
"mz-m2note",
"owwo4s",
"la-s5",
"android6.0;bln-tl10",
"android5.1;nf",
"vivoy11",
"lephone w7",
"android7.0;duk-al20",
"yq603",
"android6.0;mp1503",
"android4.3;r8007",
"ztev0840",
"h60-l12",
"sch-i699",
"samsung gt-i9500",
"android6.0.1;sm-a7108",
"zh-cn;was-al00",
"g19",
"android5.1;h9",
"c1530l",
"lephone w9",
"birdl7plus",
"coolpad8690_t00",
"hisensef20t",
"vivoy11iw",
"android5.1;w909",
"huaweim2-a01w",
"y71-811",
"one",
"u7",
"ipad5,3) applewebkit",
"coolpady71-811",
"samsung gt-i9508",
"android5.0.2;che-tl00",
"zh-cn;huaweirio-al00",
"m688c",
"coolpad8690",
"konkae1",
"android6.0.1;sm-c5000",
"android5.1.1;kingsun-f3c",
"android6.0.1;kingsun-f70",
"c1330",
"sm-g5309w",
"android5.1;sm-j7008",
"readboy_g35s",
"bf_t25",
"shownp1",
"kingsun-f3c",
"sm-g3819d",
"huawei cun-tl00",
"android5.0;gn9006",
"android6.0;mz-m5s",
"yl-coolpad7722",
"t03",
"sk2-01",
"la-s31",
"lenovo a3580",
"android4.4.4;sm-w2015",
"android7.1.1;1607-a01",
"ivvii3-01",
"hmnote1ltetd",
"android6.0.1;sov33",
"android7.0;was-al00",
"konkad557",
"android4.4.2;l50t",
"r815t",
"ztec2016",
"android4.4.2;chm-ul00",
"android6.0.1;sm-a8000",
"android4.4.4;sm-e7009",
"ztec880u",
"android4.4.4;s3",
"meizupro7pluslet",
"samsungsm-n9200",
"pe-ul00",
"k-touch h2",
"android4.4.4;p308l",
"android5.1;g699",
"meizupro7let",
"lenovoa3600-d",
"kopo k33",
"android4.4.4;h3",
"123456789abcdef",
"zh-cn;gionee-f100s/f100s",
"sugars9",
"g621-tl00m",
"wp-s2",
"ksd1051",
"asus_t00f",
"hs-hisense f20t",
"meizupro6slet",
"zh-cn;m5note",
"wp-s",
"coolpad7295c",
"3",
"lenovo a368t",
"meizupro6pluslet",
"tclp501m",
"a37f",
"c107-9",
"lenovo x2-to",
"android5.1;la-x4",
"android7.0;ta-1000",
"e6883",
"huawei dav-703l",
"android5.1.1;a51",
"android6.0;hd1",
"vivoxplay6l",
"meizupro6let",
"sm919",
"htcd516d",
"samsung sm-g935f",
"meizunote5let",
"lenovoz2",
"ivviss1-03",
"android6.0.1;kiw-tl00h",
"android6.0;x7",
"yl-coolpad9190l_c00",
"m811",
"noainx11",
"bf_t13",
"hs-hisense f22",
"gionee-gn8003/gionee-gn8003",
"meizunote3let",
"android4.4.4;che1-cl20",
"zh-cn;m6note",
"gt-i9308",
"c106-7",
"meizumx6let",
"zh-cn;ple-703l",
"sm-g9308",
"kopo l6",
"gionee-gn5005/gionee-gn5005",
"meizumx5let",
"zh-cn;m2note",
"coolpadt2-c01",
"redmi 4x",
"android5.1.1;kiw-ul00",
"meizumaxlet",
"r7t",
"htf908",
"android6.0.1;zh_cn;c106-8",
"f1f",
"k2-l",
"ivviv1m",
"kopo l8",
"android4.4.2;r7005",
"lenovoa399",
"huaweip6-t00",
"coolpadt2-00",
"lenovok51c78",
"sc-cl00",
"android5.1;lt580",
"android5.1;mz-mx4",
"sm901",
"coolpadt2-w01",
"huawei eva-dl00",
"unc-a2",
"sm801",
"android7.0;trt-al00a",
"android7.0;trt-tl10",
"ivviv3",
"lenovok50-t3s",
"bf_t12",
"meizu5slet",
"android4.4.2;h60-l12",
"zh-cn;gionee-gn5001/gn5001",
"lenovoa820t",
"sugary7",
"android4.4.4;3007",
"android5.0.2;sm-a5009",
"android6.0;la-s31",
"mz-m5s",
"zh-cn;oppoa37m",
"sm-n900",
"nx511j_v3",
"huaweiy511-t00",
"bowayu11",
"android6.0.1;c106-8",
"lenovok32c36",
"android5.0.1;gt-i9502",
"sm-j7108",
"android5.1.1;m623c",
"android6.0;1603-a02",
"sm-j7109",
"coolpad8297-w01",
"android4.4.4;sm-g5308w",
"zh-cn;oppor7",
"k3dx-v5g",
"android4.4.4;f301",
"yl-coolpady91-921",
"lenovok31-t3",
"hisensed2-m",
"android5.1;lovme",
"android5.0.2;sm-g5309w",
"sc-ul10",
"zh-cn;mz-m1note",
"oppoa31",
"c106-6",
"android7.0;sm-g9500",
"lenovoa788t",
"huaweigra-cl10",
"android6.0;m621c",
"android5.1;x7",
"dalvik",
"android6.0;frd-al00",
"android4.4.4;??",
"zh-cn;mx6",
"mz-m5",
"zh-cn;mx5",
"sop-m9",
"r829t",
"s658t",
"android4.4.4;sm-g5306w",
"android7.0;was-tl10",
"d888",
"lovme-t15",
"huaganht8",
"coolpad8702d",
"lenovo a3900",
"android4.4.2;gn151",
"android6.0;frd-al10",
"android6.0.1;g0215d",
"android5.1;u7",
"gionee-f105/f105",
"tclp590l",
"yl-8298-m02",
"android6.0;sm-g5309w",
"lenovok10e70",
"yoord",
"huawei tag-cl00",
"android6.0.1;sm-a9000",
"android6.0.1;sm-n9108v",
"samsungsm-g9008v",
"samsungsm-n9005",
"sm-g5108q",
"haipainobles1",
"ytonev2",
"jd-t",
"android5.1.1;m631",
"android5.0;sm-n9008",
"android5.1.1;sm-a5100",
"zteb2015",
"android6.0.1;sm-a9100",
"ztebv0720",
"l50t",
"android5.1;s7",
"android6.0;4g+",
"hm1sc",
"sm-g3818",
"mz-u20",
"android5.1;koomii-k8",
"lenovoa805e",
"huaweig629-ul00",
"k1",
"android5.0;sm-n9008s",
"android6.0;t1",
"yl-coolpad8713",
"zh-cn;mz-m2",
"ivviss1-01",
"lephonet9",
"android5.1;h7",
"s1",
"comioa8",
"gn9008",
"lenovox2-ap",
"lenovo a3910e70",
"android6.0;h60-l01",
"zh-cn;gionee-f103/f103",
"android5.0;r7plus",
"zh-cn;lon-al00",
"htc_x9u",
"changhongs06",
"xiaomi2014821",
"mlledl8",
"mi1s",
"sm-g5108",
"android6.0.1;c107-9",
"birdl2",
"samsung sm-a3000",
"zh-cn;huaweicaz-al10",
"lphone",
"android5.1.1;ple-703l",
"zh-cn;knt-al20",
"y67a",
"android5.1.1;m636",
"mz-m571c",
"android5.1;best_sonny_lt533",
"samsungsm-g9250",
"gionee-s9/s9",
"sch-p729",
"android5.0.2;che-tl00h",
"mp1701",
"lingwin",
"doovl1",
"android5.1;ar9",
"zh-cn;oppoa33",
"tclm2m",
"changhongs08",
"samsung-sm-n900a",
"android6.0;u20",
"e6683",
"noainx12",
"mz-m2",
"android4.4.2;nx505j",
"android4.3;n5117",
"android6.0.1;jdn-al00",
"changhongs09",
"lenovos658t",
"android7.0;vtr-al00",
"zh-cn;gionee-gn3003/gn3003",
"r1",
"mp1603",
"android5.1.1;sm-a8000",
"noxw",
"android4.4.2;che2-tl00",
"android5.0;asus_z00adb",
"zh-cn;gionee-f5/f5",
"r827t",
"android4.2.1;2013022",
"android5.0;tcl_p620m",
"huaweic8815",
"votogt11",
"android5.0.1;sch-i959",
"zh-cn;mz-m2e",
"boway_u7",
"coolpada8-930",
"d2533",
"en-us)applewebkit",
"android5.1;gm-t5",
"android5.1;xshitou-nt18",
"gn3003l",
"android5.1;r2",
"android6.0;r7plus",
"vivox5maxv",
"android5.1;tetc-v1",
"gionee-gn9012/gn9012",
"coolpada8-831",
"coolpadt1",
"lenovoa628t",
"mp1512",
"android5.1;mz-m3s",
"sm-w2016",
"sm-a3009",
"lenovoa938t",
"android6.0.1;sm919",
"android4.4.2;gt-n7100",
"bw521",
"lephonew9+",
"huawei tit-cl00",
"android7.0;pra-al00",
"yl-coolpad5263",
"okp6",
"a51kc",
"sm-g3589w",
"sm-n900t",
"rio-ul00",
"gn5001l",
"h3",
"lenovoa360t",
"android6.0.1;sm-c7010",
"android6.0.1;lex722",
"zh-cn;mi-4c",
"lenovoa850",
"owwo5s",
"jdn-w09",
"bf_t18",
"4a",
"android4.4.4;n918st",
"hisensem20-m",
"android4.4.4;cm810",
"zh-cn;mz-m3",
"m2017",
"lephonev8",
"android4.2.2;hol-t00",
"android6.0.1;1505-a02",
"x620",
"xt1085",
"jdn-al00",
"android7.0;bln-tl00",
"sm-n9109w",
"android7.1.1;od103",
"vivox3t",
"nx511j",
"htc_m8x",
"android5.1;gn9010",
"gt-i8558",
"huaweig628-tl00",
"android4.4.4;g620s-ul00",
"jd-plus",
"sm-g3568v",
"android6.0.1;jdn-w09",
"ramosr9",
"vivos7t",
"hw-huawei rio-cl00",
"android6.0;m611d",
"lezhoulz6",
"f303",
"mumu",
"lg-d855",
"android6.0;gn5003",
"sop-w1",
"android6.0.1;sm-c9000",
"gionee-v185/v185",
"gionee-gn5001s/gn5001s",
"zh-cn;vivox9plus",
"t3",
"zh-cn;trt-al00a",
"bestsonny_lt988",
"htcd820u",
"android4.4.3;hw-che1-cl10",
"kob-l09",
"android4.4.4;1107",
"ivvif1s",
"vivox3v",
"android6.0;gn5005",
"android4.3;r831s",
"coolpady60-c1",
"zh-cn;m651cy",
"android5.1;lgtd-x3l",
"zh-cn;4g",
"gm-q5",
"xm-tpro",
"sintaves1plus",
"huawei g6-c00",
"lenovoa890e",
"huaweig610-t11",
"coolpad5316",
"oppo a57t",
"android5.0.2;m823",
"mz-m688c",
"android7.0;bln-al40",
"lex822",
"hisensem10-m",
"k-touchx6",
"2013023",
"hlanote3",
"android5.1;zh-cn;gionee-gn5001s/gn5001s",
"android6.0;m685c",
"p2",
"bfv9",
"android6.0.1;1515-a01",
"yl-coolpady80d",
"zh-cn;mz-m5s",
"1509-a00",
"r833t",
"haipainobles8",
"yltx6-r9",
"android6.0;ale-tl00",
"samsungsm-g9550",
"oppor831t",
"r8",
"android6.0;gn8002s",
"android4.4.4;p318l",
"android4.4.2;t1-701u",
"f301",
"t07",
"android4.4.2;2014501",
"tcl_p620m",
"cmcm5s",
"android5.0.2;sm-a5000",
"android6.0;ale-ul00",
"oppor829t",
"sch-n719",
"coolpad7298d",
"go t3",
"android5.1.1;sm-j5108",
"hilaryh2",
"lex722",
"android4.4.2;123456789abcdef",
"lenovoa808t",
"lenovo a5500",
"yusuna7",
"android7.0;pra-al00x",
"zh-cn;eva-al10",
"p7",
"x909",
"android6.0.1)applewebkit",
"meizu;zh_cn;applewebkit",
"yl-coolpadt1",
"zh-cn;eva-al00",
"nx513j",
"honorh30-l02",
"sm-n910g",
"hyf-a1",
"sm-g3812",
"huawei g6-t00",
"android5.1;gn152",
"go t5",
"android5.1;gn3002l",
"zh-cn;vivox9s",
"asus_z010da",
"huawei g6-u00",
"coolpad8737a",
"android5.1;m3s",
"android6.0;gn9011",
"android4.2.2;2014011",
"t2",
"gt-i9158p",
"zteq529c",
"android7.0;vie-al10",
"sch-i959",
"1100",
"x3",
"android6.0;gn9012",
"android4.3;sm-n7508v",
"android7.0;mi-4c",
"x9i",
"en-us;nexusone",
"sch-w2013",
"android5.1.1;ss2-01",
"samsungsm-g935x",
"samsungsm-g9500",
"gm-t5",
"6s",
"android4.4.4;yq601",
"zh-cn;mix2",
"ztea2017",
"android6.0.1;mix",
"onefivec2",
"best_sonny_lt416",
"lex651",
"oppoa53t",
"r7s",
"hw-nxt-cl00",
"android5.0;f303",
"zh-cn;oppor7s",
"s8",
"oppor813t",
"android5.1;gn3001",
"x6d",
"lenovoa806",
"lex650",
"huaweiu8120",
"1515-a01",
"android5.0;sm-g9009d",
"android6.0;mp1512",
"coolpad8729",
"f100b",
"sugarf7",
"android5.1;qk-6385t",
"android7.0;btv-dl09",
"samsungsm-n9208",
"y66",
"lenovos90-e",
"f1",
"vivox510t",
"bowayl3",
"android6.0.1;1605-a01",
"huaweig730-t00",
"lenovo a5800-d",
"yl-coolpadb770",
"android7.0;edi-al10",
"yl-coolpada8-932",
"gionee-gn3001/gn3001",
"hwi-tl00",
"sm-n910u",
"lenovoa916",
"android5.0;m3",
"f100sl",
"zh-cn;huaweitag-tl00",
"m351",
"t02",
"sm-j700f",
"coolpad8715",
"android5.1;mz-mx5",
"android6.0;h9",
"android5.0.2;f303",
"zh-cn;huaweitag-al00",
"hlj-x1-l",
"android4.4.4;r8207",
"f103l",
"android6.0.1;lex720",
"??",
"android5.1;zh-cn;",
"android4.4.4;n5207",
"android5.1;lovme-t16",
"coolpad5263s",
"android4.4.4;la2-s",
"android5.1;gn3003l",
"coolpad5267",
"android4.4.4;m463c",
"y23l",
"f103s",
"android4.4.4;aoledior",
"bowayu16",
"bf_t19",
"android7.0;eva-tl00",
"android5.0;zh-cn;",
"zh-cn;stf-al10",
"lenovos850",
"7722ct",
"android5.1.1;mi-4c",
"huaweicun-tl00",
"samsungsm-n9008v",
"samsungsm-g930x",
"lenovoa5890",
"h30-u10",
"g699",
"android5.0;sm-n900",
"sop-m8",
"m823",
"lenovo a5860",
"oppor7t",
"doovt20l",
"lenovoa860e",
"coolpad8720l",
"android6.0.1;ath-tl00",
"cenxins17",
"gionee-gn8002s/gionee-gn8002s",
"h30-t10",
"samsung-sm-n7508v_td release",
"android4.4.4;la2-sn",
"coolpad8718",
"android6.0;cam-tl00",
"android6.0;mytel",
"android5.1;gn5001l",
"hs-hisensee70-t",
"coolpad5367",
"lg-h860",
"android5.1;best_sonny_lt416",
"android4.4.4;x5",
"yl-coolpads6-nt1",
"mi+4lte",
"owwoq7",
"android6.0.1;sm-n9100",
"huaweicun-al00",
"oppor7st",
"android5.1;m2",
"android5.1;gn5001",
"android4.4.4;sm-a5000",
"yl-coolpads6-nt",
"gionee-f100s/f100s",
"h30-t00",
"g688",
"lephonet3+",
"f108",
"bgo-dl09",
"android5.1.1;kiw-al10",
"zh-cn;knt-al10",
"lenovoa388t",
"ztea2015",
"gionee-f103/f103",
"tclp301m",
"birdd08",
"huaweig610-c00",
"android5.1;y21",
"android5.1;jd-plus",
"coolpad8712",
"huaweig660-l075",
"koobeem7q",
"android5.1.1;8692-m02",
"m-16",
"m836",
"android5.1;f100a",
"android6.0;d51732",
"android6.0.1;sm-g5520",
"doovl520",
"gionee-gionee_s10cl/s10cl",
"lenovok80m",
"q3",
"coolpady1",
"lephonev5",
"android6.0.1;ath-tl00h",
"mz-m681c",
"zh-cn;oppor9tm",
"gn9010l",
"huaweicrr-cl00",
"coolpad5200s",
"android6.0.1;sm-g5700",
"android7.0;knt-tl10",
"a680q",
"shownp2",
"sm-g3588v",
"android6.0;gem-703l",
"hw-huaweiy635-cl00",
"zh-cn;frd-al00",
"gn9000",
"hisensee51-m",
"honor h30-l02",
"gionee-gionee_s10/s10",
"r9tm",
"02:00:00:00:00:00",
"n3",
"ztec880a",
"lenovoa6800",
"coolpad8670",
"android5.1;r1",
"android4.4.4;k2-01",
"android4.4.4;gucci",
"sm-g7509",
"lephonew7",
"android7.0;bln-al20",
"android5.1.1;samsung-sm-j3109",
"sm-g3609",
"coolpad8702",
"huawei g610-t11",
"android4.4.2;sm-n9006",
"zh-cn;bac-al00",
"cm810",
"samsung-sm-g5308w_td",
"zh-cn;plk-tl01h",
"bah-w09",
"lenovoa3580",
"lenovoa808t-i",
"mz-mx6",
"android5.1;8298-a01",
"android5.1;7722ct",
"vivox5maxl",
"x18",
"samsung sm-e7000",
"android6.0;1503-a01",
"android6.0;nce-al00",
"x800+",
"s5",
"android5.1;f105",
"android6.0.1;nx569j",
"ksd1053",
"android5.0.2;sm-a7000",
"android6.0;knt-al10",
"nx569j",
"h7",
"android6.0;nce-al10",
"1701-m01",
"lenovoa380t",
"x5",
"android5.1;s6",
"letvx502",
"m8",
"htc_a9u",
"android4.4.2;m812c",
"t1-a23l",
"huawei g610-u00",
"android6.0;gn8003",
"android5.1;gn8001",
"1703-m01",
"zh-cn;lovme-t15",
"wp_v5",
"coolpad5892",
"android7.1.1;od105",
"coolpad8675-hd",
"huaweia199",
"tcl750",
"coolpad5951",
"coolpad8675-fhd",
"zh-cn;m3",
"htcd820t",
"koobeea3",
"gomes1",
"birdm6",
"hw-huaweiale-cl00",
"1707-a01",
"s860e",
"r9s",
"dazenx7",
"android4.4.4;boway_u7",
"gionee-gn3003/gn3003",
"s810t",
"nexus4",
"p770",
"koobees9q",
"zh-cn;mz-m5",
"mi2s",
"lephonet2",
"p318l",
"sm-g3502c",
"android6.0;nem-tl00",
"koobeem6",
"android6.0;nem-tl00h",
"xiaomi2014112",
"lephonet13",
"lenovoa3300-t",
"mi2a",
"opsson",
"coolpad5217",
"android7.0;knt-al10",
"sch-i739",
"sm-g3608",
"android5.0.2;f103",
"mz-m5note",
"gt-i9200",
"vivoy11t",
"yl-coolpad5952",
"oppor1s",
"coolpad8297w",
"android6.0;eva-tl00",
"coolpad8298-a01",
"sm-n920g",
"nx573j",
"nossons6",
"yl-coolpad8676_m01",
"android6.0;hm-i506-tl",
"sov33",
"nx575j",
"huaweic8818",
"ckbd",
"sch-p709e",
"android5.1.1;kiw-cl00",
"samsungsm-g9300",
"sm-g3509i",
"r9m",
"s7",
"s968t",
"android6.0;nem-ul10",
"android7.1.1;ta-1000",
"tcl302u",
"huaweic8817e",
"sintaves1",
"android5.1;f100",
"mla-al00",
"coolpad8675-f01",
"hisensem30t",
"android5.1;bestsonny_lt988",
"android5.1.1;nx513j",
"sm-g9209",
"g620s-ul00",
"kopol8",
"noaink6",
"qk-6385t",
"hisensem30",
"android7.0;knt-ul10",
"android6.0;btv-dl09",
"aoledior",
"huaweig610-u00",
"r2",
"vivox7plusl",
"android6.0.1;sm-g9006v",
"android6.0;pe-cl00",
"sm-j710gn",
"eva-cl00",
"v188",
"asus_t00j",
"lephonew2",
"android4.4.4;che1-cl10",
"android5.0;sm-n9002",
"coolpad8715_cmcc_td",
"oppor9plustma",
"s16",
"beee7s",
"android5.1.1;sm-g5500",
"android4.4.2;4g",
"android5.1.1;nx511j_v3",
"android5.1;a5",
"android5.1.1;scale",
"huaweic8816",
"android5.1.1;2014813",
"lenovoa2580",
"doovl5",
"mla-tl00",
"hlj-gm-q1",
"nexus5",
"huaweic8816d",
"lenovoa5860",
"android5.1;1501_m02",
"u707t",
"birdlt02",
"android5.1;mx5",
"android4.4.4;sk2-01",
"xiaomi4",
"y55a",
"1713-a01",
"gn9007",
"android5.1;gn9010l",
"r823t",
"android4.4.4;sk3-02",
"ob-oppoa31c",
"lenovoa5800-d",
"s898t",
"android6.0;dig-al00",
"android6.0;x600",
"android4.4.2;sm-g3568v",
"coolpad5370",
"xiaomi2013023",
"mla-tl10",
"alp-tl00",
"gt-i9152p",
"tetc-v1",
"android6.0;m5s",
"quyq1",
"coolpad8712s;android",
"nx595j",
"iphone 6sp",
"nf",
"coolpad8297",
"opsson_v6",
"android6.0;eva-dl00",
"samsungsm-j7008",
"mlledv9",
"samsung sm-g5510",
"a57",
"yusuna8",
"android5.1;8676-m01",
"zh-cn;gionee-gn3001/gn3001",
"lenovoa2800-d",
"a5",
"android4.3;x9007",
"zh-cn;redmi4a",
"d6653",
"vmx6",
"samsung-sm-j3109",
"android5.1.1;kiw-tl00",
"android4.4.4)applewebkit",
"android5.1;gm-t5+",
"zh-cn;bln-al20",
"huaweic199s",
"ramosmos1",
"samsung sm-g5700",
"yl-sk3-01",
"mlledx9",
"lephonet5v",
"android6.0;plk-al10",
"mi 1s",
"huaganht6",
"android5.1;8676-a01",
"android5.1.1;kiw-tl00h",
"zh-cn;vivoy55a",
"huaweic199",
"android5.1;8681-a01",
"zh-cn;letvx500",
"r9",
"lenovoa2860",
"samsung sm-g6100",
"android7.0;duk-tl30",
"yl-coolpad8297-t02",
"lenovoa850+",
"android4.4.2;che2-tl00m",
"android5.0;sm-n9006",
"android5.1;jd-t",
"ta-1041",
"android4.4.2;che-tl00h",
"android4.4.4;wp-s",
"android4.3;sm-g7108v",
"samsungsm-g9200",
"sch-i939i",
"s820e",
"hyf-e1",
"lephonet7",
"android4.4.2;chm-tl00h",
"lt580",
"t11",
"vivox1st",
"android5.1;g19",
"ath-ul00",
"android5.1;xt1085",
"android4.4.4;1100",
"lenovos898t+",
"mi 2a",
"k-touchh2",
"sm-g3608_td",
"android7.0;bln-tl10",
"zh-cn;redmi3",
"laaboov6",
"vivov3maxl",
"samsung sm-g7106",
"android5.1;mx4",
"android6.0;gn8002",
"android6.0.1;nx569h",
"tclp331m",
"tetc-s9",
"huawei g629-ul00",
"zh-cn;huaweivns-al00",
"ath-tl00h",
"en-us;nexus5",
"android6.0.1;ath-al00",
"android6.0;a680q",
"oysinx8",
"bln-tl00",
"lenovo a808t-i",
"lenovo a6800",
"zh-cn;kiw-al10",
"sm-g9006v",
"samsung sm-g7508q",
"android5.1;bf_t13",
"ath-tl00",
"android6.0;yepen",
"pro7-h",
"xt1052",
"coolpadk1-nt",
"samsungsm-a7000",
"doovl1m",
"s820",
"android4.4.4;r7c",
"android5.0.1;gt-i9500",
"zh-cn;m1metal",
"v5",
"ath-cl00",
"android6.0;edi-al10",
"android5.0.2;plk-tl01h",
"sch-i829",
"coolpad5721",
"mz-m3note",
"android7.0;lon-al00",
"android6.0.1;sm-g9009d",
"pro7plus",
"note",
"lenovo a688t",
"samsung sm-g9008v",
"android4.4.2;v188s",
"android4.4.2;pe-ul00",
"coolpad8705_cmcc_td",
"android6.0.1;sm-g9009w",
"2a",
"r11",
"iphone 91",
"onee1001",
"o",
"xiaomimimax",
"doovl7",
"s810t td",
"k-touchk5",
"samsung sm-g9008w",
"android7.0;nem-al10",
"shownp1+",
"android5.1;jxd-t55",
"samsungsm-g9280",
"sm-t331c",
"4g-plus",
"k-touchk6",
"android5.0.2;m3",
"iphone 92",
"xt1662",
"bf_a503",
"android5.1;bm006",
"lenovotb2-x30f",
"pe-tl00m_td",
"knt-tl10",
"nokia_xl_4g",
"huaweig730-l075",
"vivoxplay",
"1105",
"opssonv6",
"wp_v6",
"k2-01",
"huawei g660-l075",
"android5.1;m6",
"gioneef6l",
"laabood1",
"note2",
"pro 6s",
"android6.0.1;sm-g9209",
"mi4",
"android4.4.4;hw-chm-cl00",
"sk1-01",
"gioneef6",
"note3",
"android4.4.4;sm-g3609",
"lephonet6+",
"doova10",
"sm-j3300",
"xiaoxyep7",
"zteba610c",
"android6.0.1;sm-n9200",
"rv:16.0)gecko",
"android4.4.2;gn9000",
"samsungsm-a5000",
"release",
"zh-cn;sintaves1000",
"android7.0;knt-al20",
"samsungsm-a7100",
"lovme-t12",
"gioneef109l",
"huawei",
"android5.1.1;sm-g6000",
"android6.0;get",
"android6.0.1;scale",
"zh-cn;gionee-gn8001/gn8001",
"zh-cn;aoledior",
"gioneef109",
"mi-oneplus",
"android6.0;plk-cl00",
"zh-cn;gionee-gionee_gn5007/gn5007",
"g620-l75",
"lenovos810t",
"samsungsch-i699i",
"android5.0.2;x608",
"r819t",
"android5.1;bestsonny_lt989",
"android5.0.5;4g",
"mi 5c",
"quyq1s",
"android6.0.1;sm-g9280",
"android5.0.2;ale-tl00",
"yl-coolpady75",
"zh-cn;sintaves1",
"zh-cn;xshitou-nt18",
"zh-cn;stf-al00",
"doova3",
"s90-t",
"coolpady76",
"coolpadr108",
"xiaomimi4w",
"lephonet708",
"koobees301",
"android5.0;sm-n9008v",
"gt-s7898",
"zh-cn;vivox6d",
"x-apple",
"android6.0;cam-ul00",
"android7.0;sm-g9350",
"doova5",
"lenovo a708t",
"android6.0;bln-al10",
"doova6",
"nx507j",
"sm-g8508s",
"coolpad8702d_cmcc_lte",
"8692-m02",
"samsung sm-g9208",
"gt-i9118",
"sm-t355c",
"vivoy623",
"g7-tl00",
"nxt-ul00",
"android4.4.4;2014821",
"zteq519t",
"android5.0.2;ale-ul00",
"android4.4.2;yoord",
"coolpad8297-t01_cmcc_td",
"huaweitit-cl00",
"p308l",
"android5.1;aloes",
"m578ca",
"gt-i8262d",
"android4.4.4;sm-a7009",
"android5.1.1;nx512j",
"android6.0.1;sm-g5510",
"coolpad5956",
"android5.1;zh-cn;gionee-f100/f100",
"r8200",
"kopol128",
"htc d816w",
"android6.0.1;1509-a00",
"sk3-02",
"kopol168",
"android5.0;sm-n9009",
"mx7",
"zh-cn;oppor7sm",
"android4.4.4;v183",
"android5.0.2;plk-tl00",
"hisensee602m",
"android6.0.1;m3x",
"y67",
"meitum4",
"coolpad8029",
"android4.4.4;sm-e7000",
"mz-m1metal",
"android5.1;bf_t25",
"android4.4.4;yepen",
"android4.4.4;c730lw",
"android6.0.1;sm-g6100",
"huaweig750-t00",
"huaweinxt-l09",
"shown_p1",
"android4.4.2;sm705",
"samsung sm-a7108",
"android6.0.1;sm-g9008v",
"android6.0;plk-tl00",
"android5.0.2;gn9006",
"android4.4.4;a31t",
"android6.0;pe-tl20",
"htc d820t",
"n1t",
"coolpad5950",
"s920",
"android6.0;bm006",
"android4.4.4;aloes",
"huaweig750-t20",
"android5.1;y685q",
"android4.4.2;sm-n9005",
"android4.4.4;x9007",
"android4.4.4;t1-a21w",
"samsung sm-g9308",
"android6.0.1;gm-q5+",
"ob-oppo 3005",
"htc d820u",
"android5.1.1;yq603",
"mi-one plus",
"android6.0;plk-ul00",
"  ",
"m812c",
"lenovo a7600-m",
"android5.0;sm-g9008v",
"samsungsm-c700x",
"coolpad8732",
"huawei g730-l075",
"android6.0;btv-w09",
"zh-cn;wp",
"coolpad8675-w00",
"huawei g730-t00",
"android5.1;gm-t1",
"nxt-cl00",
"yl-coolpad5892_c00",
"nxt-dl00",
"yl-coolpad5891q",
"huawei g730-u00",
"android5.1.1;4g",
"android5.1;cp8676_i02",
"android6.0;mz-mx6",
"android4.4.4;p8",
"zh-cn;m6",
"android5.0.2;asus_z010da",
"coolpads6-nt",
"a2015",
"android6.0.1;x900+",
"android4.4.2;u19",
"android5.1;4gvolte",
"coolpad9976d",
"android7.0;pra-tl10",
"coolpad7295c_c00",
"android7.0;frd-dl00",
"coolpady82-900",
"king7",
"huawei y511-t00",
"s60-t",
"android4.4.2;h60-l02",
"android6.0;zh-cn;",
"android5.1.1;yq601",
"readboy_g100",
"coolpad8297d",
"huawei g750-t00",
"android5.1;sop-n1",
"lenovo a788t",
"android5.1;hw-scl-cl00",
"samsung sm-j3110",
"android5.1;yepen",
"android5.1.1;f103s",
"android5.1;s03",
"huawei g750-t20",
"android4.4.4;sm-g3608",
"android5.1;la-s1",
"ob-oppo a51kc",
"ob-oppo r7005",
"android5.0;f103",
"android4.4.2;v188",
"ob-oppo r8205",
"android5.1;20151209t",
"android4.4.4;n5209",
"android5.1;gm-t6",
"huaweipe-tl20",
"coolpads6-nc1",
"android6.0.1;sm-g9008w",
"lenovo a808t",
"android4.4.4;r8107",
"samsung sm-j5108",
"android6.0.1;c106",
"android4.4.2;2013023",
"android4.4.4;sm-g7509",
"huawei gem-703l",
"android6.0;mp1602",
"android4.4.4;sm-g7200",
"samsung sm-j7008",
"lenovo a820t",
"android5.1;gn3002",
"android4.4.2;h60-l03",
"bladev6",
"android5.1.1;2014812",
"lenovo a850",
"android6.0;changhongs08",
"android5.1;y685c",
"android6.0.1;c106-9",
"android5.1.1;t1-823l",
"samsung-sm-g920a",
"lenovo a858t",
"android5.1;y71-811",
"android5.1.1;2014811",
"android6.0;n09",
"samsung-sm-g925a",
"android6.0;bln-al20",
"android4.4.2;s2",
"samsung sm-n9002",
"android4.4.4;1105",
"sch-i879",
"android5.1;m1",
"android4.4.4;sm-g7508q",
"android4.4.4;r8200",
"samsung sm-n9006",
"android6.0;mz-m5",
"android4.4.4;r8205",
"samsung sm-n9008",
"samsung sm-n9008s",
"android5.0.2;sm-a3000",
"android5.1;m57ac",
"samsung sm-n9108v",
"rv:43.0) gecko",
"lenovo a938t",
"android6.0;2014817",
"hw-huawei b199",
"android5.1;scale",
"android6.0.1;sm-a5108",
"hw-huawei c199s",
"android6.0.1;sm-j7109",
"android5.1;t03",
"android6.0.1;sm-g9208",
"hw-huawei c8816d",
"android5.1;jxd",
"android5.1;gn5002",
"android6.0;zh-cn;gionee-gn5003/gionee-gn5003",
"coolpad9976a",
"hw-huawei c8817e",
"android5.1;hlj-x1-l",
"android5.0;r7plust",
"coolpady70c",
"android6.0;",
"android4.4.4;g621-tl00m",
"android6.0.1;x800",
"android5.1;m651cy",
"android5.0;sm-g9008w",
"android6.0.1;x800+",
"android5.1.1;zh-cn;",
"hm 1sw",
"android5.0.2;zh-cn;",
"android5.1.1;8692-a00",
"android6.0.1;kingsun-f4",
"android5.1;nx541j",
"coolpad8017",
"android6.0.1;x900",
"one a2001",
"le x625",
"android5.1.1;yq607",
"android4.4;g7-tl00",
"lenovo k10e70",
"android4.4.4;sm-g5108q",
"android4.4.4;3005",
"one e1001",
"android5.1;md6",
"android5.1;m688c",
"android5.1;p9",
"sm-g9287",
"android6.0;lex622",
"android5.1;aoledior",
"rio-cl00",
"coolpad9190_t00",
"android7.0;eva-dl00",
"android6.0;lex626",
"android4.2.2;zh-cn;gionee-v185",
"coolpad8297_cmcc_td",
"android4.3;g620-l75",
"p7-l05",
"android5.1;gn9007",
"coolpad7296s",
"android5.0.2;nx511j",
"android4.4.4;asus_x002",
"sm-t211",
"android4.4;zh-cn;",
"s850t",
"hw-c8817d",
"android4.4.4;hht6a",
"r7kf",
"sm-g5308w_td",
"p993",
"nxt-tl00_td",
"p70-t",
"ot-990m",
"sm-t705c",
"s850",
"s890",
"s90-e",
"p6",
"sch-i939d",
"sm-g9008v_td",
"sbm200sh",
"sbm303sh");
public static void main(String[] args) {
ChromeDriverManager.getInstance().useMirror().forceCache().setup();
WebDriver driver = new ChromeDriver();
for (String model : models) {
try {
findOne(model, driver);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static void findOne(String model, WebDriver driver){
if (!DBUtils.isSpiderMobile(model)) {
System.out.println(model + "已经爬过了");
return;
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String newModel;
if (StringUtils.contains(model, ";")) {
newModel = StringUtils.substringAfter(model, ";");
} else {
newModel = model;
}
driver.get("http://search.zol.com.cn/s/");
// driver.get("http://detail.zol.com.cn/index.php?c=SearchList&keyword=chm-tl00h");
WebElement element = driver.findElement(By.id("kword"));
element.sendKeys(newModel);
WebElement element2 = driver.findElement(By.linkText("产品"));
element2.click();
WebElement element1 = driver.findElement(By.className("search-btn"));
element1.click();
List<WebElement> elements = driver.findElements(By.className("list-item"));
MobileVO mobileVO = new MobileVO();
mobileVO.setOldModel(model);
if (CollectionUtils.isNotEmpty(elements)) {
WebElement mobileElement = elements.get(0);
String brandName = mobileElement.findElement(By.cssSelector(".pro-intro > ul > li.cate > a:nth-child(2)")).getText();
String mobile = mobileElement.findElement(By.cssSelector("h3 > a")).getText();
String mobileName = StringUtils.substringBefore(mobile, "(");
String modelName = StringUtils.replace(mobileName, brandName,"").trim();
String price = mobileElement.findElement(By.cssSelector(".price-type")).getText();
mobileVO.setBrandName(brandName);
mobileVO.setBrandPinyin(changeToPinYin(brandName));
mobileVO.setMobileName(mobileName);
mobileVO.setModel(modelName);
mobileVO.setPrice(price);
}
DBUtils.add(mobileVO);
System.out.println(mobileVO);
}
private static String changeToPinYin(String str){
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
char[] chars = str.toCharArray();
StringBuilder fullPrint = new StringBuilder();
for (int i =0; i < chars.length; i++) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(chars[i], format);
if (temp == null) {
return str;
}
fullPrint.append(temp[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}
return fullPrint.toString();
}
}
...@@ -30,6 +30,7 @@ public class SinaBlogProcessor implements PageProcessor { ...@@ -30,6 +30,7 @@ public class SinaBlogProcessor implements PageProcessor {
//文章页 //文章页
} else { } else {
page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2")); page.putField("title", page.getHtml().xpath("//div[@class='articalTitle']/h2"));
System.out.println(page.getHtml().xpath("//div[@class='articalTitle']/h2"));
page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']")); page.putField("content", page.getHtml().xpath("//div[@id='articlebody']//div[@class='articalContent']"));
page.putField("date", page.putField("date",
page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)")); page.getHtml().xpath("//div[@id='articlebody']//span[@class='time SG_txtc']").regex("\\((.*)\\)"));
......
...@@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory; ...@@ -5,7 +5,7 @@ import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.Page; import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site; import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider; import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.selenium.SeleniumDownloader; import us.codecraft.webmagic.downloader.SeleniumDownloader;
import us.codecraft.webmagic.processor.PageProcessor; import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable; import us.codecraft.webmagic.selector.Selectable;
......
package us.codecraft.webmagic.samples;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.HttpClientDownloader;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.selector.Selectable;
import javax.management.JMException;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
public class ZolBrandSpider implements PageProcessor {
private static final Logger logger = LoggerFactory.getLogger(AnjukeSpider.class);
private Site site = Site.me().setRetryTimes(3).setSleepTime(3000).setCycleRetryTimes(3)
.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36")
// .addHeader("Cookie","ip_ck=4sKJ5Pn/j7QuNTU4MzM4LjE1MTc5MTk0NDQ%3D; lv=1517919445; vn=1; z_pro_city=s_provice%3Dzhejiang%26s_city%3Dhangzhou; Hm_lvt_ae5edc2bc4fc71370807f6187f0a2dd0=1517919449; visited_subcateId=57; Hm_lvt_63bf9e4e99a63f89aa91dd6bd5978c7a=1517919462; Hm_lpvt_63bf9e4e99a63f89aa91dd6bd5978c7a=1517919462; userProvinceId=26; userCityId=153; userCountyId=0; userLocationId=158648; realLocationId=158648; userFidLocationId=158648; z_day=izol97232%3D2%26ixgo20%3D1%26rdetail%3D7; Adshow=5; Hm_lpvt_ae5edc2bc4fc71370807f6187f0a2dd0=1517919686\n")
.addHeader("Referer", "http://www.zol.com.cn/");
private List<String> mobileBrandUrlList = new CopyOnWriteArrayList<>();
private Set<String> mobileBrandNames = Sets.newHashSet("vivo","OPPO","华为","三星","苹果","荣耀","金立","魅族","中兴","Moto","努比亚",
"一加","锤子科技","360","国美手机","小米","夏普","华硕","美图","诺基亚","HTC","8848","SUGAR","黑莓","海信","AGM",
"索尼移动","酷派","LG","联想","联想ZUK","谷歌","飞利浦","朵唯","大神","酷比","天语","微软","小辣椒","TCL","长虹",
"康佳","中国移动","YotaPhone","雷蛇","MANN","纽曼","邦华","海尔","VEB","惠普","乐目","格力","云创通","COMIO",
"小格雷","sonim","神舟","先锋","BDV","imoo","innos","蓝魔","汇威","柯达","富可视","Acer宏碁","PPTV","松下",
"manta","TP-LINK","索野","同洲","达闼","奇酷","乐视","明基","UT斯达康","大可乐","ivvi","青橙","守护宝","21克",
"克里特","保千里","新石器","GEMRY","云狐","阿尔卡特","朗界","卡布奇诺","青葱","彩石","首云","领虎","传奇","独影天幕",
"米蓝","青想","华度","超多维","优豊","百合","铂爵","易百年","全普","泛泰","意龙","阔密","Ant one","途为","VAIO",
"小宇宙","图灵","VANO","美猴王","垦鑫达","读书郎","IUNI","波导","红鸟","BROR","言信","雅马亚虎","卓普","宝丽来",
"nibiru","美莱仕","直角","百事","欧恩","亿通","Gigaset金阶");
@Override
public void process(Page page) {
String oldBrand = StringUtils.substringAfter(page.getUrl().get(), "&keyword=");
System.out.println(oldBrand);
System.out.println(page.getHtml().get());
//手机列表区域
Selectable selectable = page.getHtml().xpath("//*[@class=\"list-item\"]");
//*[@id="wrapper"]/div[2]/div[1]/div
String brand = selectable.xpath("#pro-intro > ul > li.cate > a:nth-child(2)").get();
System.out.println(brand);
// List<Selectable> selectables = page.getHtml().xpath("*[@id=\"list-content\"]/div[@class='li-itemmod']").nodes();
// if (selectables.size() == 0) {
// logger.warn("没找到指定内容={}", page.getRequest().getUrl());
// }
// for (Selectable selectable : selectables) {
// String communityName = selectable.$("h3 > a","text").get();
// String areaAddress = selectable.$("address","text").get();
// String area = StringUtils.substringBetween(areaAddress, "[","]").trim();
// String address = StringUtils.substringAfter(areaAddress, "]").trim();
// String price = selectable.$(".li-side > p > strong","text").get().trim();
// AnjuKeVO anjuKeVO = new AnjuKeVO();
// anjuKeVO.setAddress(address);
// anjuKeVO.setArea(area);
// anjuKeVO.setCity(city);
// anjuKeVO.setPrice(price);
// anjuKeVO.setCommunityName(communityName);
// anjuKeVO.setUrl(page.getRequest().getUrl());
// DBUtils.add(anjuKeVO);
// }
// page.addTargetRequests(page.getHtml().$(".page-content").links().all());
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) throws JMException {
HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
List<String> urls = Lists.newArrayList();
for (String url : Mobils.models) {
urls.add("http://detail.zol.com.cn/index.php?c=SearchList&subcateId=57&keyword=" + url);
}
String[] urlArr = urls.toArray(new String[urls.size()]);
Spider zol = Spider.create(new ZolBrandSpider()).setDownloader(httpClientDownloader)
// .setScheduler(new FileCacheQueueScheduler("zol_spider").setDuplicateRemover(new HashSetDuplicateRemover()))
.addUrl(urlArr).thread(1);
// .addUrl("https://lvliang.anjuke.com/community/p1/")
zol.start();
}
}
package us.codecraft.webmagic.samples;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.downloader.HttpClientDownloader;
import us.codecraft.webmagic.model.samples.AnjuKeVO;
import us.codecraft.webmagic.processor.PageProcessor;
import us.codecraft.webmagic.scheduler.FileCacheQueueScheduler;
import us.codecraft.webmagic.scheduler.component.HashSetDuplicateRemover;
import us.codecraft.webmagic.selector.Selectable;
import us.codecraft.webmagic.utils.DBUtils;
import javax.management.JMException;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
public class ZolMobileSpider implements PageProcessor {
private static final Logger logger = LoggerFactory.getLogger(AnjukeSpider.class);
private Site site = Site.me().setRetryTimes(3).setSleepTime(3000).setCycleRetryTimes(3)
.setUserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36");
private List<String> mobileBrandUrlList = new CopyOnWriteArrayList<>();
private Set<String> mobileBrandNames = Sets.newHashSet("vivo","OPPO","华为","三星","苹果","荣耀","金立","魅族","中兴","Moto","努比亚",
"一加","锤子科技","360","国美手机","小米","夏普","华硕","美图","诺基亚","HTC","8848","SUGAR","黑莓","海信","AGM",
"索尼移动","酷派","LG","联想","联想ZUK","谷歌","飞利浦","朵唯","大神","酷比","天语","微软","小辣椒","TCL","长虹",
"康佳","中国移动","YotaPhone","雷蛇","MANN","纽曼","邦华","海尔","VEB","惠普","乐目","格力","云创通","COMIO",
"小格雷","sonim","神舟","先锋","BDV","imoo","innos","蓝魔","汇威","柯达","富可视","Acer宏碁","PPTV","松下",
"manta","TP-LINK","索野","同洲","达闼","奇酷","乐视","明基","UT斯达康","大可乐","ivvi","青橙","守护宝","21克",
"克里特","保千里","新石器","GEMRY","云狐","阿尔卡特","朗界","卡布奇诺","青葱","彩石","首云","领虎","传奇","独影天幕",
"米蓝","青想","华度","超多维","优豊","百合","铂爵","易百年","全普","泛泰","意龙","阔密","Ant one","途为","VAIO",
"小宇宙","图灵","VANO","美猴王","垦鑫达","读书郎","IUNI","波导","红鸟","BROR","言信","雅马亚虎","卓普","宝丽来",
"nibiru","美莱仕","直角","百事","欧恩","亿通","Gigaset金阶");
@Override
public void process(Page page) {
// if (!DBUtils.isSpider(page.getRequest().getUrl())) {
// logger.warn("{}已经采集过", page.getRequest().getUrl());
// return;
// }
//手机列表区域
Selectable mobileSelectable = page.getHtml().xpath("/html/body/div[5]/div[1]/div[4]");
List<Selectable> mobils = mobileSelectable.xpath("//*[@id=\"J_PicMode\"]/li").nodes();
String brandName = null;
String model = null;
for (Selectable selectable : mobils) {
String name = StringUtils.substringBefore(selectable.xpath("/li/h3/a/text()").get(),"(").trim();
for (String brand : mobileBrandNames) {
if (name.contains(brand)) {
brandName = brand;
model = StringUtils.replace(name, brand, "");
break;
}
}
String price = selectable.xpath("/li/div/span[2]/b[2]/text()").get();
String pinyin = changeToPinYin(brandName);
System.out.println(pinyin + "--" + brandName + "--" + model + "--" + price);
}
// List<Selectable> selectables = page.getHtml().xpath("*[@id=\"list-content\"]/div[@class='li-itemmod']").nodes();
// if (selectables.size() == 0) {
// logger.warn("没找到指定内容={}", page.getRequest().getUrl());
// }
// for (Selectable selectable : selectables) {
// String communityName = selectable.$("h3 > a","text").get();
// String areaAddress = selectable.$("address","text").get();
// String area = StringUtils.substringBetween(areaAddress, "[","]").trim();
// String address = StringUtils.substringAfter(areaAddress, "]").trim();
// String price = selectable.$(".li-side > p > strong","text").get().trim();
// AnjuKeVO anjuKeVO = new AnjuKeVO();
// anjuKeVO.setAddress(address);
// anjuKeVO.setArea(area);
// anjuKeVO.setCity(city);
// anjuKeVO.setPrice(price);
// anjuKeVO.setCommunityName(communityName);
// anjuKeVO.setUrl(page.getRequest().getUrl());
// DBUtils.add(anjuKeVO);
// }
// TODO: 2018/2/5 目标页面加入
// page.addTargetRequests(page.getHtml().$(".page-content").links().all());
}
@Override
public Site getSite() {
return site;
}
private String changeToPinYin(String str){
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
char[] chars = str.toCharArray();
StringBuilder fullPrint = new StringBuilder();
for (int i =0; i < chars.length; i++) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(chars[i], format);
if (temp == null) {
return str;
}
fullPrint.append(temp[0]);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
}
return fullPrint.toString();
}
public static void main(String[] args) throws JMException {
HttpClientDownloader httpClientDownloader = new HttpClientDownloader();
Spider zol = Spider.create(new ZolMobileSpider()).setDownloader(httpClientDownloader)
// .setScheduler(new FileCacheQueueScheduler("zol_spider").setDuplicateRemover(new HashSetDuplicateRemover()))
.addUrl("http://detail.zol.com.cn/cell_phone_index/subcate57_list_1.html")
// .addUrl("https://lvliang.anjuke.com/community/p1/")
.thread(2);
zol.start();
}
}
...@@ -6,6 +6,7 @@ import org.apache.commons.dbutils.QueryRunner; ...@@ -6,6 +6,7 @@ import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.BeanListHandler;
import us.codecraft.webmagic.model.samples.AnjuKeVO; import us.codecraft.webmagic.model.samples.AnjuKeVO;
import us.codecraft.webmagic.model.samples.CollegeVO; import us.codecraft.webmagic.model.samples.CollegeVO;
import us.codecraft.webmagic.model.samples.MobileVO;
import java.sql.Connection; import java.sql.Connection;
import java.sql.SQLException; import java.sql.SQLException;
...@@ -69,4 +70,31 @@ public class DBUtils { ...@@ -69,4 +70,31 @@ public class DBUtils {
} }
} }
public static void add(MobileVO mobileVO) {
QueryRunner qr = new QueryRunner();
String sql = "insert into mobile(old_model, brand_name, brand_pinyin, mobile_name,model, price) values(?,?,?,?,?,?)";
Object params[] = {mobileVO.getOldModel(), mobileVO.getBrandName(), mobileVO.getBrandPinyin(), mobileVO.getMobileName(), mobileVO.getModel(), mobileVO.getPrice() };
try(Connection connection = dataSource.getConnection()) {
qr.update(connection, sql, params);
} catch (SQLException e) {
e.printStackTrace();
}
}
public static boolean isSpiderMobile(String oldModel) {
QueryRunner qr = new QueryRunner(dataSource);
String selectSql = "select * from mobile where old_model = ?";
try {
String[] params = {oldModel};
List<MobileVO> mobileVOS = qr.query(selectSql, new BeanListHandler<>(MobileVO.class), params);
if (CollectionUtils.isNotEmpty(mobileVOS)) {
return false;
}
} catch (SQLException e) {
e.printStackTrace();
}
return true;
}
} }
webmagic-extension
-------
webmagic与selenium的集成,用于爬取ajax页面。selenium太重,所以单独抽出成一个包了。
\ No newline at end of file
# What WebDriver to use for the tests
driver=phantomjs
#driver=firefox
#driver=chrome
#driver=http://localhost:8910
#driver=http://localhost:4444/wd/hub
# PhantomJS specific config (change according to your installation)
#phantomjs_exec_path=/Users/Bingo/bin/phantomjs-qt5
phantomjs_exec_path=/Users/Bingo/Downloads/phantomjs-1.9.8-macosx/bin/phantomjs
#phantomjs_driver_path=/Users/Bingo/Documents/workspace/webmagic/webmagic-selenium/src/main.js
phantomjs_driver_loglevel=DEBUG
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>us.codecraft.duiba</groupId>
<artifactId>webmagic-parent</artifactId>
<version>0.7.6-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>webmagic-selenium</artifactId>
<properties>
<webdrivermanager.version>2.1.0</webdrivermanager.version>
</properties>
<dependencies>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.8.1</version>
</dependency>
<dependency>
<groupId>us.codecraft.duiba</groupId>
<artifactId>webmagic-core</artifactId>
<version>${project.version}</version>
</dependency>
<!--<dependency>-->
<!--<groupId>com.github.detro</groupId>-->
<!--<artifactId>phantomjsdriver</artifactId>-->
<!--<version>1.2.0</version>-->
<!--</dependency>-->
<dependency>
<groupId>io.github.bonigarcia</groupId>
<artifactId>webdrivermanager</artifactId>
<version>${webdrivermanager.version}</version>
</dependency>
<dependency>
<groupId>com.codeborne</groupId>
<artifactId>phantomjsdriver</artifactId>
<version>1.4.3</version>
<exclusions>
<exclusion>
<artifactId>selenium-remote-driver</artifactId>
<groupId>org.seleniumhq.selenium</groupId>
</exclusion>
<exclusion>
<artifactId>selenium-api</artifactId>
<groupId>org.seleniumhq.selenium</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
package us.codecraft.webmagic.downloader;
import org.junit.Ignore;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
/**
* @author code4crafter@gmail.com <br>
* Date: 13-7-26 <br>
* Time: 下午12:27 <br>
*/
public class SeleniumTest {
@Ignore("need chrome driver")
@Test
public void testSelenium() {
System.getProperties().setProperty("webdriver.chrome.driver", "/Users/yihua/Downloads/chromedriver");
Map<String, Object> contentSettings = new HashMap<String, Object>();
contentSettings.put("images", 2);
Map<String, Object> preferences = new HashMap<String, Object>();
preferences.put("profile.default_content_settings", contentSettings);
DesiredCapabilities caps = DesiredCapabilities.chrome();
caps.setCapability("chrome.prefs", preferences);
caps.setCapability("chrome.switches", Arrays.asList("--user-data-dir=/Users/yihua/temp/chrome"));
WebDriver webDriver = new ChromeDriver(caps);
webDriver.get("http://huaban.com/");
WebElement webElement = webDriver.findElement(By.xpath("/html"));
System.out.println(webElement.getAttribute("outerHTML"));
webDriver.close();
}
}
#driver=phantomjs
#driver=firefox
driver=chrome
#driver=http://localhost:8910
driver=http://localhost:4444/wd/hub
# PhantomJS specific config (change according to your installation)
#phantomjs_exec_path=/Users/detro/bin/phantomjs-qt5
phantomjs_exec_path=/Users/detro/bin/phantomjs-upstream
phantomjs_driver_path=../../src/main.js
phantomjs_driver_loglevel=DEBUG
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment