需求:根据微信公众号名称进入公众号主页,抽取出公众号对应的biz
首先使用的是jsoup,注意最新的jsoup可以 设置IP代理,pom依赖如下:
</span><dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
爬取一段时间以后,再怎么伪装Joup,就是不能爬取出内容。于是换用webDriver,操纵浏览器抽取信息。
下载资源:http://pan.baidu.com/s/1jI7CxBS
实例代码:
package com.pxene.dmp.selenium;
import java.io.File;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxProfile;
import com.pxene.dmp.common.StringUtils;
public class Selenium4Weixin {
public static void main(String[] args) throws Exception {
// 加载驱动
System.setProperty("webdriver.firefox.bin", "D:/soft/firefox/firefox.exe");
Random random = new Random();
List<String> useragents = null;
useragents = IOUtils.readLines(Selenium4Weixin.class.getResourceAsStream("/proxy/useragent.list"));
FirefoxProfile profile = new FirefoxProfile();
// 设置useragent
String useragent = "(Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0";
profile.setPreference("general.useragent.override", useragent);
WebDriver driver = new FirefoxDriver(profile);
WebDriver driver2 = new FirefoxDriver(profile);
// 页面初始化加载超时设置
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver2.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
String urlMould = "http://weixin.sogou.com/weixin?query=AAAA&ie=utf8";
List<String> waitlist = null;
waitlist = FileUtils.readLines(new File("./bizcrawler.txt"));
for (int i = 0; i < waitlist.size(); i++) {
String chName = waitlist.get(i).split("\t", 2)[0];
String alName = waitlist.get(i).split("\t", 2)[1];
String biz = "";
String url = urlMould.replace("AAAA", alName);
int j=0;
try {
driver.get(url);
// 被发现则重启
if (driver.getTitle().equals("搜狗搜索")) {
driver = restart(driver, useragents);
}
List<WebElement> contents = driver.findElements(By.xpath("//div[@target='_blank']"));
for (final WebElement c : contents) {
// 微信号的地址
String src = c.getAttribute("href");
WebElement targetElement = c.findElement(By.xpath("//div[@class='txt-box']"));
String alName_get = targetElement.findElement(By.xpath("//h4/span/label")).getText();
if (alName_get.equals(alName.trim())) {
driver2.get(src);
if (driver2.getTitle().contains("请输入验证码")) {
driver = restart(driver, useragents);
driver2.get(src);// 重新输入
}
biz = StringUtils.regexpExtract(driver2.getPageSource(), "var biz = \"(.*?)\"");
break;
}
}
} catch (Exception e) {
//出现异常重启爬虫
driver2 = restart(driver2, useragents);
//重跑
if(i>1 && i-j==1){
j=--i;
}
}
System.out.println(waitlist.get(i).trim() + "\t" + biz.trim());
}
}
// 重启浏览器
public static WebDriver restart(WebDriver driver, List<String> useragents) {
driver.close();
// 设置代理
FirefoxProfile profile = new FirefoxProfile();
Random random = new Random();
profile.setPreference("general.useragent.override", useragents.get(random.nextInt(useragents.size())));
driver = new FirefoxDriver(profile);
// 设置加载超时
driver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS);
return driver;
}
}
附:bizcrawer.list
栖巢咖啡 qichaokafei
昆山市千灯中心幼儿园 gh_20d5310d08b7
中国光大银行福州分行 gh_74aec776722e
梅州市人民医院 gh_b3d5adc1c57f
西湖国宾馆 xihusgh
Sizzler时时乐西餐 gh_029ca7b7ea40
超丽日化 super_beautiful
权金城 quanjinchengbj
东阳农商银行 zjdybank
九庄火锅 jzxgf777
成都热门排行榜 CDHotTop
武汉生活热门 whshrm520
广船国际 gh_fe68acfc1fe4
建设银行上海市分行 sh_ccb
大连佳兆业广场 dlkaisagroup
三意川菜 gh_5c07c5c4b6ab
乐清市人民医院 yqsrmyy
青一色火锅 cqqingyise
全球生活视界 qqshsj
北京棒约翰 PapaJohns1984
融信观山海 xmrxgsh
上海K11 sh_k11
长治漳泽农商银行 czzrcb
魅力新城伍家岗 gh_e53a2fbea0d6
SHISEIDO资生堂 gh_a8283433d699
昆山高新区水秀幼儿园 gh_a2fe73347d2d
德清农商银行 DRCB2012
杭州瑞丽医疗美容医院 hzrlzx
全球热门前线 RenMenQX
西安潮流生活 inlive029
创业资本论 cyzblun
全球热门劲爆 qqjbrm
新娱乐在线 xinyulezaixian001
杨恒均游学 gh_708ab1afe89a
百花门业建材家居城 xabhmy1
东莞国税 gh_ab78a52a09f3
时尙创意生活 sscysh
广丰县永利酒店 yonglihotel
延安大学 yadxgfwx
热门生活频道 rmshpd
安丘农村商业银行 aqncsyyhdx