文件已上传:https://www.pan38.com/share.php?code=pvvmX 提取码:8897
做美团店铺营销的经常需要手动一个个点击附近商家然后提取手机号,这种方法真的非常麻烦,而且还费劲,那么又办法能自动输入关键词然后自动搜索,自动筛选评分和店铺然后采集数据码?答案是肯定的,下面这个插件就可以实现这个效果,仅供学习。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MeituanBusinessInfoApp {
private static final String USER_AGENT = "Mozilla/5.0";
private static final int TIMEOUT = 10000;
public static void main(String[] args) {
String demoUrl = "https://example.com/business"; // 示例URL
List<BusinessInfo> businesses = fetchBusinessInfo(demoUrl);
System.out.println("获取到 " + businesses.size() + " 条商家信息:");
for (BusinessInfo biz : businesses) {
System.out.println(biz);
}
}
public static List<BusinessInfo> fetchBusinessInfo(String url) {
List<BusinessInfo> result = new ArrayList<>();
try {
Document doc = Jsoup.connect(url)
.userAgent(USER_AGENT)
.timeout(TIMEOUT)
.get();
Elements bizElements = doc.select(".business-item");
for (Element elem : bizElements) {
BusinessInfo biz = new BusinessInfo();
biz.name = elem.select(".name").text();
biz.rating = elem.select(".rating").text();
biz.phone = elem.select(".phone").text();
biz.category = elem.select(".category").text();
result.add(biz);
}
} catch (IOException e) {
System.err.println("获取数据失败: " + e.getMessage());
}
return result;
}
static class BusinessInfo {
String name;
String rating;
String phone;
String category;
@Override
public String toString() {
return String.format("商家: %s\n评分: %s\n电话: %s\n分类: %s\n",
name, rating, phone, category);
}
}
}
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.jsoup:jsoup:1.15.3'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
}
task runApp(type: JavaExec) {
classpath = sourceSets.main.runtimeClasspath
mainClass = 'MeituanBusinessInfoApp'
}
import java.util.List;
public class BusinessInfoAdapter {
private List<BusinessInfo> data;
public BusinessInfoAdapter(List<BusinessInfo> data) {
this.data = data;
}
public void filterByRating(float minRating) {
data.removeIf(biz -> {
try {
return Float.parseFloat(biz.rating) < minRating;
} catch (NumberFormatException e) {
return true;
}
});
}
public void filterByCategory(String category) {
data.removeIf(biz -> !biz.category.contains(category));
}
}
import java.util.List;
import java.util.stream.Collectors;
public class DataFilter {
public static List<BusinessInfo> filterByRating(
List<BusinessInfo> list, float minRating) {
return list.stream()
.filter(b -> Float.parseFloat(b.rating) >= minRating)
.collect(Collectors.toList());
}
public static List<BusinessInfo> filterByPhonePrefix(
List<BusinessInfo> list, String prefix) {
return list.stream()
.filter(b -> b.phone.startsWith(prefix))
.collect(Collectors.toList());
}
}
java.util.List;
public class BusinessDisplay {
public static void printTable(List<BusinessInfo> list) {
System.out.println("+----------------------+-------+----------------+--------------+");
System.out.println("| 商家名称 | 评分 | 电话 | 行业分类 |");
System.out.println("+----------------------+-------+----------------+--------------+");
for (BusinessInfo biz : list) {
System.out.printf("| %-20s | %-5s | %-14s | %-12s |\n",
biz.name, biz.rating, biz.phone, biz.category);
}
System.out.println("+----------------------+-------+----------------+--------------+");
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。