分析携程旅游页面利用爬虫获取分类目录
-
爬取的数据再页面上的展示
-
爬虫得到的数据展示,得到的数据一起是817条数据
-
页面分析难点剖析
1.左边的主目录,F12得到xpath是没有难度的,右边目录可查看建立在鼠标在左边的目录上再移动到右边(截图进行分析,最笨拙的方式);
2.当F12查看右边目录的元素时,鼠标离开右边的目录时,F12对应的Elements将消失(通过root向下查找元素进行定位);
3.目录的格式多样(目录可分为三类,第一类:形如主题旅游-周边旅游-欧洲-美洲;第二类:形如境内旅游;第三类:形如香港 澳门 台湾-日本 蒙古-东南亚 南亚-澳新南太 中东非); -
具体实现代码如下(性能还需优化,使用的方式比较笨拙,若有更好的方式,欢迎沟通交流)
public class CTripService {
private static final String CTRIPURL = "https://vacations.ctrip.com/";
public void getTrip(){
try{
WebDriver webDriver = new ChromeDriver();
// 利用chrome浏览器打开种子URL的页面
webDriver.get(CTRIPURL);
waitTime(2);
// 使用Action实现触发
Actions actions = new Actions(webDriver);
// 左侧主目录,从root依次向下定位
int firstLiSize = elementsSize(webDriver, By.xpath("//*[@id=\"root\"]/div/div/div[1]/div[2]/div[1]/ul/li"));
for(int j=1;j <= firstLiSize;j++){
WebElement webElement = webDriver.findElement(By.xpath("//*[@id=\"root\"]/div/div/div[1]/div[2]/div[1]/ul/li["+j+"]"));
actions.moveToElement(webElement).perform();
waitTime(2);
// 右侧第一类目录
if(isExist(webDriver,By.xpath("//*[@id=\"root\"]/div/div/div[1]/div[2]/div[1]/div/ul/li[1]/div/a[1]"))){
firstContents(webDriver, firstType(webDriver, "//*[@id=\"root\"]/div/div/div[1]/div[2]/div[1]/ul/li["+j+"]/div/h3/span"));
}
// 右侧第二类目录