【爬虫】Java爬取KFC全国门店信息
官网地址:
http://www.kfc.com.cn/kfccda/storelist/index.aspx
基础库
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.4</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency> <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency> <!-- 连接池https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
翻了一下这个门店获取的页面,城市是固定名称,没有对应CODE
直接作为下面门店翻页的请求参数,接口校验只有Cookie
Cookie的获取从请求门店信息查询就能获取到
代码部分:
1、常量
我怕翻页要用到总记录数,还是放进来了
实际上只要判断接口返回的集合是不是空的就行...
package cn.cloud9.kfc.constant; import java.util.regex.Pattern; public interface KfcConstant { String KFC_STORE_CLIENT_PAGE = "http://www.kfc.com.cn/kfccda/storelist/index.aspx";
String KFC_STORE_PAGING_QUERY_API = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname";
Integer PAGE_SIZE = 10;
Pattern TOTAL_PATTERN = Pattern.compile("\"rowcount\":[0-9]+"); }
2、PO类
用来返回请求参数和Cookie值,以方便后续递归调用
package cn.cloud9.kfc.po; import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode; import java.net.HttpCookie;
import java.util.List; /**
* @author OnCloud9
* @description
* @project RegionReptile-Remaster
* @date 2022年07月09日 上午 11:52
*/
@Data
@EqualsAndHashCode
@Builder
public class BasicInfo {
private List<String> cityNames;
private List<HttpCookie> cookies;
}
3、数据PO类
package cn.cloud9.kfc.po; import lombok.*; import java.time.LocalDateTime; /**
* @author OnCloud9
* @description
* @project RegionReptile-Remaster
* @date 2022年07月09日 上午 11:47
*/
@Data
@EqualsAndHashCode
public class KfcStorePO {
public KfcStorePO() {
}
private String storeName;
private String provinceName;
private String cityName;
private String pro;
private String addressDetail;
private LocalDateTime genTime;
}
4、封装的方法:
package cn.cloud9.kfc.util; import cn.cloud9.kfc.constant.KfcConstant;
import cn.cloud9.kfc.po.BasicInfo;
import cn.cloud9.kfc.po.KfcStorePO;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.db.Db;
import cn.hutool.db.Entity;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.SneakyThrows;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements; import java.net.HttpCookie;
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Matcher;
import java.util.stream.Collectors; /**
* @author OnCloud9
* @description
* @project RegionReptile-Remaster
* @date 2022年07月09日 上午 11:06
*/
public class KfcUtil {
private static Db db = Db.use(); /**
* 获取Cookie和基础请求参数
*/
public static BasicInfo getBasicInfo() {
final HttpResponse httpResponse = HttpUtil.createGet(KfcConstant.KFC_STORE_CLIENT_PAGE).addHeaders(new HashMap<String, String>() {{
this.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
this.put("Upgrade-Insecure-Requests", "1");
this.put("Referer", "http://www.kfc.com.cn/kfccda/news.aspx");
this.put("Host", "www.kfc.com.cn");
this.put("Connection", "keep-alive");
this.put("Cache-Control", "max-age=0");
this.put("Accept-Language", "zh-CN,zh;q=0.9");
this.put("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
}}).execute();
final List<HttpCookie> cookies = httpResponse.getCookies();
final String body = httpResponse.body();
final Document document = Jsoup.parse(body);
final Elements liList = document.select("ul.shen_info > li");
List<String> cityNames = new ArrayList<>();
liList.forEach(li -> li.select("div.shen_city > a").forEach(aTag -> cityNames.add(aTag.text())));
return BasicInfo.builder().cityNames(cityNames).cookies(cookies).build();
} /**
* 请求门店翻页查询接口时携带的基本信息
* @return
*/
public static Map<String, String> getNewBasicHeader() {
return new HashMap<String, String>() {{
this.put("Accept", "application/json, text/javascript, */*; q=0.01");
this.put("Accept-Language", "zh-CN,zh;q=0.9");
this.put("Connection", "keep-alive");
this.put("Content-Length", "55");
this.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
this.put("Host", "www.kfc.com.cn");
this.put("Origin", "http://www.kfc.com.cn");
this.put("Referer", "http://www.kfc.com.cn/kfccda/storelist/index.aspx");
this.put("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36");
this.put("X-Requested-With", "XMLHttpRequest");
}};
} /**
* 按城市名和翻页参数获取接口数据
* @param cityName
* @param pageIndex
* @param pageSize
* @param cookies
* @return
*/
public static void getPagingData(String cityName, Integer pageIndex, Integer pageSize, List<HttpCookie> cookies) {
final Integer PAGE_SIZE = null == pageSize ? KfcConstant.PAGE_SIZE : pageSize;
final Map<String, String> header = getNewBasicHeader();
header.put("Cookie", cookies.stream().map(HttpCookie::toString).collect(Collectors.joining("; ")));
final HttpResponse response = HttpUtil.createPost(KfcConstant.KFC_STORE_PAGING_QUERY_API).addHeaders(header).formStr(new HashMap<String, String>() {{
this.put("cname", cityName);
this.put("pid", "");
this.put("pageIndex", pageIndex.toString());
this.put("pageSize", PAGE_SIZE.toString());
}}).execute(); final String body = response.body();
final Map<String, Object> map = JSON.parseObject(body, Map.class);
final Integer totalCount = getTotalCount(map.get("Table").toString());
final List<KfcStorePO> storeList = JSONObject.parseArray(map.get("Table1").toString(), KfcStorePO.class); boolean isEmpty = CollUtil.isEmpty(storeList);
if (isEmpty) return;
storeList.forEach(store -> writeStoreInfoToDB(store));
getPagingData(cityName, pageIndex + 1, PAGE_SIZE, cookies);
} /**
* 初始化建表
*/
@SneakyThrows
public static void initialTableSpace() {
final String SQL =
"CREATE TABLE IF NOT EXISTS `kfc-store` (\n" +
" `ID` int NOT NULL AUTO_INCREMENT COMMENT 'KFC门店ID',\n" +
" `STORE_NAME` varchar(32) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '门店名称',\n" +
" `PROVINCE` varchar(12) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所在省份',\n" +
" `CITY` varchar(12) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '所在城市',\n" +
" `ADDRESS` varchar(254) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '具体地址',\n" +
" `TAG` varchar(48) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '相关特性',\n" +
" `GEN_TIME` datetime DEFAULT NULL COMMENT '记录创建时间',\n" +
" PRIMARY KEY (`ID`)\n" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='KFC门店统计表';";
db.execute(SQL, null);
} /**
* 写db操作
* @param storePO
*/
@SneakyThrows
private static void writeStoreInfoToDB(KfcStorePO storePO) {
db.insert(Entity.create("`kfc-store`")
.set("STORE_NAME", storePO.getStoreName())
.set("PROVINCE", storePO.getProvinceName())
.set("CITY", storePO.getCityName())
.set("ADDRESS", storePO.getProvinceName() + "|" + storePO.getCityName() + "|" + storePO.getAddressDetail())
.set("TAG", storePO.getPro())
.set("GEN_TIME", LocalDateTime.now())
);
} /**
* 获取接口提供的总记录数
* @param jsonData
* @return
*/
private static Integer getTotalCount(String jsonData) {
final Matcher matcher = KfcConstant.TOTAL_PATTERN.matcher(jsonData);
if (!matcher.find()) return 0;
return Integer.valueOf(matcher.group().replace("\"rowcount\":", "").trim());
} }
最后主启动类:
package cn.cloud9.kfc.app; import cn.cloud9.kfc.po.BasicInfo; import java.net.HttpCookie;
import java.util.List;
import static cn.cloud9.kfc.util.KfcUtil.*; /**
* @author OnCloud9
* @description
* @project RegionReptile-Remaster
* @date 2022年07月09日 上午 11:51
*/
public class KfcMainApplication {
public static void main(String[] args) {
final BasicInfo basicInfo = getBasicInfo();
final List<String> cityNames = basicInfo.getCityNames();
final List<HttpCookie> cookies = basicInfo.getCookies();
cityNames.forEach(cityName -> getPagingData(cityName, 1, null, cookies));
}
}
请求参数就是里面的城市,一共608个城市
爬完得到的数据结果,全国一万两千家不到:
SELECT COUNT(1) FROM `kfc-store`;
+----------+
| COUNT(1) |
+----------+
| 11858 |
+----------+
1 row in set (0.01 sec)
取南昌市的门店信息:
mysql> SELECT * FROM `kfc-store` WHERE `CITY` LIKE '%南昌%';
+------+-----------------------+----------+--------+-----------------------------------------------------------------------------------------------------------+--------------------------------+---------------------+
| ID | STORE_NAME | PROVINCE | CITY | ADDRESS | TAG | GEN_TIME |
+------+-----------------------+----------+--------+-----------------------------------------------------------------------------------------------------------+--------------------------------+---------------------+
| 7309 | 蓝天碧水餐厅 | 江西省 | 南昌市 | 江西省|南昌市|青山南路72号1层和地下一层 | Wi-Fi,礼品卡 | 2022-07-09 14:37:38 |
| 7310 | 上海南路 | 江西省 | 南昌市 | 江西省|南昌市|青山湖区上海路3号 | Wi-Fi,店内参观,礼品卡 | 2022-07-09 14:37:38 |
| 7311 | 大众 | 江西省 | 南昌市 | 江西省|南昌市|叠山路287号大众购物中心一楼 | 点唱机,礼品卡 | 2022-07-09 14:37:38 |
| 7312 | 新建欧尚 | 江西省 | 南昌市 | 江西省|南昌市|欧尚百货一楼 | 点唱机,礼品卡 | 2022-07-09 14:37:38 |
| 7313 | 南京西路 | 江西省 | 南昌市 | 江西省|南昌市|南京西路277号 | 点唱机,店内参观,礼品卡 | 2022-07-09 14:37:38 |
| 7314 | 中山城 | 江西省 | 南昌市 | 江西省|南昌市|中山路177号 | 点唱机,礼品卡 | 2022-07-09 14:37:39 |
| 7315 | 玉河 | 江西省 | 南昌市 | 江西省|南昌市|解放西路81-83号印象汇一楼 | 店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7316 | 站前广场 | 江西省 | 南昌市 | 江西省|南昌市|洛阳路70号1-2层 | Wi-Fi,点唱机,礼品卡 | 2022-07-09 14:37:39 |
| 7317 | 莲塘 | 江西省 | 南昌市 | 江西省|南昌市|南昌县莲塘镇五一路308号1-2层 | Wi-Fi,礼品卡 | 2022-07-09 14:37:39 |
| 7318 | 新洪大 | 江西省 | 南昌市 | 江西省|南昌市|洪城路588号1-2层 | 点唱机,礼品卡 | 2022-07-09 14:37:39 |
| 7319 | 新八一 | 江西省 | 南昌市 | 江西省|南昌市|东湖区中山路一号百货大楼一至二层 | 点唱机,礼品卡 | 2022-07-09 14:37:39 |
| 7320 | 经开 | 江西省 | 南昌市 | 江西省|南昌市|经济技术开发区榴云路与枫林大道交汇处 | Wi-Fi,点唱机,礼品卡 | 2022-07-09 14:37:39 |
| 7321 | 城南路 | 江西省 | 南昌市 | 江西省|南昌市|莲塘城南路贵都国际花城大润发超一楼 | 点唱机,店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7322 | 青云谱 | 江西省 | 南昌市 | 江西省|南昌市|井冈山大道悦达-家乐福国际购物广场一楼 | Wi-Fi,店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7323 | 会展路 | 江西省 | 南昌市 | 江西省|南昌市|红谷滩万达广场2楼肯德基门店 | Wi-Fi,点唱机,店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7324 | 新百花洲 | 江西省 | 南昌市 | 江西省|南昌市|中山路以南、西湖路以东华润万家商场一层、二层 | Wi-Fi,点唱机,店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7325 | 梦时代 | 江西省 | 南昌市 | 江西省|南昌市|北京东路308号恒茂梦时代国际广场三号楼一层 | Wi-Fi,点唱机,店内参观,礼品卡 | 2022-07-09 14:37:39 |
| 7326 | 进贤天虹 | 江西省 | 南昌市 | 江西省|南昌市|进贤民和镇胜利南路天集商业广场天虹商场一、二楼 | Wi-Fi,店内参观,礼品卡 | 2022-07-09 14:37:40 |
| 7327 | 南昌高铁餐厅 | 江西省 | 南昌市 | 江西省|南昌市|红谷滩新区九龙湖南昌西站进站内场候车厅肯德基 | Wi-Fi,点唱机,礼品卡 | 2022-07-09 14:37:40 |
| 7328 | 广北 | 江西省 | 南昌市 | 江西省|南昌市|八一广场万达购物广场地上一层 | Wi-Fi,礼品卡 | 2022-07-09 14:37:40 |
| 7329 | 洪城大厦 | 江西省 | 南昌市 | 江西省|南昌市|西湖区北京西路156号一层洪城大厦肯德基 | Wi-Fi,点唱机,礼品卡 | 2022-07-09 14:37:40 |
| 7330 | 新上海路 | 江西省 | 南昌市 | 江西省|南昌市|上海北路230号肯德基 | Wi-Fi,礼品卡 | 2022-07-09 14:37:40 |
| 7331 | 金沙大道 | 江西省 | 南昌市 | 江西省|南昌市|金沙大道以东、雄西河以西天虹商场1-2层 | 点唱机,礼品卡 | 2022-07-09 14:37:40 |
| 7332 | 火炬大街DT | 江西省 | 南昌市 | 江西省|南昌市|高新技术开发区火炬大街高新六路116号 | 点唱机,店内参观,礼品卡 | 2022-07-09 14:37:40 |
| 7333 | 九龙湖万达 | 江西省 | 南昌市 | 江西省|南昌市|九龙大道九龙湖融创茂二层 | Wi-Fi,点唱机 | 2022-07-09 14:37:40 |
| 7334 | 高铁到达层 | 江西省 | 南昌市 | 江西省|南昌市|南昌西到达层北广场负二楼近2号线地铁进站口 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:40 |
| 7335 | 新力都荟 | 江西省 | 南昌市 | 江西省|南昌市|雄西河以西金沙大道新力都荟 | Wi-Fi,店内参观 | 2022-07-09 14:37:40 |
| 7336 | 吾悦广场 | 江西省 | 南昌市 | 江西省|南昌市|艾溪湖北路77号吾悦广场1楼 | 点唱机 | 2022-07-09 14:37:40 |
| 7337 | 西湖万达 | 江西省 | 南昌市 | 江西省|南昌市|云锦路368号万达广场一号门一楼肯德基 | Wi-Fi,点唱机 | 2022-07-09 14:37:40 |
| 7338 | 万象中心 | 江西省 | 南昌市 | 江西省|南昌市|新建县长堎镇解放路西侧、文教路南侧A、B地块礼步湖大道288号世纪万象广场 | Wi-Fi | 2022-07-09 14:37:41 |
| 7339 | 杉杉奥莱 | 江西省 | 南昌市 | 江西省|南昌市|红谷滩新区九龙大道与生米大道交界处杉杉奥特莱斯广场 | Wi-Fi,点唱机 | 2022-07-09 14:37:41 |
| 7340 | 新建首创 | 江西省 | 南昌市 | 江西省|南昌市|明矾路399号首创奥特莱斯F1层 | Wi-Fi,点唱机,店内参观,精选店 | 2022-07-09 14:37:41 |
| 7341 | 桃苑 | 江西省 | 南昌市 | 江西省|南昌市|西湖区桃苑大街288号汇海国际广场一楼 | Wi-Fi,点唱机,精选店 | 2022-07-09 14:37:41 |
| 7342 | 紫阳大道 | 江西省 | 南昌市 | 江西省|南昌市|高新区紫阳大道1216号,江西科技学院瑶湖校区正对面 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:41 |
| 7343 | 绿地中心 | 江西省 | 南昌市 | 江西省|南昌市|东湖区红谷滩中心区红谷中大道998号绿地中央广场D2商业一层 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:41 |
| 7344 | 新建吾悦肯德基 | 江西省 | 南昌市 | 江西省|南昌市|新建区新城吾悦广场1030-1031号商铺 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:41 |
| 7345 | 乐盈广场 | 江西省 | 南昌市 | 江西省|南昌市|经济技术开发区枫林西大街以北、桂苑大道以西、江西科技师范大学以东经开盈石广场一层18779282084 | Wi-Fi,点唱机 | 2022-07-09 14:37:41 |
| 7346 | 青山湖万达 | 江西省 | 南昌市 | 江西省|南昌市|青山湖区京东南大道1666号的万达广场1012A、1012B号商铺 | Wi-Fi | 2022-07-09 14:37:41 |
| 7347 | 欢乐大世界餐厅 | 江西省 | 南昌市 | 江西省|南昌市|新建区幸福北路欢乐大世界289号A411-A412壹层 | Wi-Fi,点唱机 | 2022-07-09 14:37:41 |
| 7348 | 悦佳 | 江西省 | 南昌市 | 江西省|南昌市|澄湖北大道以北莲西大道以东煌盛悦佳广场一层112至120商铺 | Wi-Fi,点唱机 | 2022-07-09 14:37:41 |
| 7349 | 澜湖广场餐厅 | 江西省 | 南昌市 | 江西省|南昌市|洪都大道以东、青山之路以西、青山南路以北澜湖花园12#商业楼一层 | Wi-Fi | 2022-07-09 14:37:41 |
| 7350 | 南昌火车站候车层 | 江西省 | 南昌市 | 江西省|南昌市|市辖区南昌站商业夹层JC-08商业点位 | Wi-Fi,点唱机 | 2022-07-09 14:37:41 |
| 7351 | 艾溪湖公园 | 江西省 | 南昌市 | 江西省|南昌市|高新区艾溪湖公园内区溪湖一路以北片区一层 | Wi-Fi,点唱机 | 2022-07-09 14:37:42 |
| 7352 | 九洲天虹 | 江西省 | 南昌市 | 江西省|南昌市|九洲天虹广场购物中心一层1018号铺 | Wi-Fi,点唱机 | 2022-07-09 14:37:42 |
| 7353 | 王府井 | 江西省 | 南昌市 | 江西省|南昌市|洪城路160号正盛太古港7#楼一层 | Wi-Fi,点唱机 | 2022-07-09 14:37:42 |
| 7354 | 九洲天虹甜品站 | 江西省 | 南昌市 | 江西省|南昌市|九洲天虹广场购物中心一层1026号铺 | Wi-Fi | 2022-07-09 14:37:42 |
| 7355 | 阳光里 | 江西省 | 南昌市 | 江西省|南昌市|市辖区经济技术开发区广兰大道888号“南天阳光小区永辉生活广场”一层 | Wi-Fi | 2022-07-09 14:37:42 |
| 7356 | 瑶湖公园 | 江西省 | 南昌市 | 江西省|南昌市|高新区瑶湖郊野森林公园内瑶湖书院旁一层 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:42 |
| 7357 | 天空之城 | 江西省 | 南昌市 | 江西省|南昌市|迎宾南大道与汽车大道万科天空之城2049商业一层 | NULL | 2022-07-09 14:37:42 |
| 7358 | 进贤服务区(西)餐厅 | 江西省 | 南昌市 | 江西省|南昌市|福银高速进贤服务区西侧 | NULL | 2022-07-09 14:37:42 |
| 7359 | 瑶湖公园 | 江西省 | 南昌市 | 江西省|南昌市|高新区瑶湖郊野森林公园内瑶湖书院旁一层 | Wi-Fi,点唱机,店内参观 | 2022-07-09 14:37:42 |
| 7360 | 天健园餐厅 | 江西省 | 南昌市 | 江西省|南昌市|南昌大学前湖校区天健园食堂一楼 | 点唱机 | 2022-07-09 14:37:42 |
| 7361 | 天健园餐厅 | 江西省 | 南昌市 | 江西省|南昌市|南昌大学前湖校区天健园食堂一楼 | 点唱机 | 2022-07-09 14:37:43 |
| 7362 | 进贤服务区(东)餐厅 | 江西省 | 南昌市 | 江西省|南昌市|福银高速进贤服务区东侧 | NULL | 2022-07-09 14:37:43 |
| 7363 | 进贤服务区(西)餐厅 | 江西省 | 南昌市 | 江西省|南昌市|福银高速进贤服务区西侧 | NULL | 2022-07-09 14:37:43 |
| 7364 | 天空之城 | 江西省 | 南昌市 | 江西省|南昌市|迎宾南大道与汽车大道万科天空之城2049商业一层 | NULL | 2022-07-09 14:37:43 |
| 7365 | 进贤服务区(东)餐厅 | 江西省 | 南昌市 | 江西省|南昌市|福银高速进贤服务区东侧 | NULL | 2022-07-09 14:37:43 |
| 7366 | 阳光里 | 江西省 | 南昌市 | 江西省|南昌市|市辖区经济技术开发区广兰大道888号“南天阳光小区永辉生活广场”一层 | Wi-Fi | 2022-07-09 14:37:43 |
| 7367 | 南昌万象汇 | 江西省 | 南昌市 | 江西省|南昌市|华润万象汇负一楼LG07号商铺 | NULL | 2022-07-09 14:37:43 |
| 7368 | 南昌万象汇 | 江西省 | 南昌市 | 江西省|南昌市|华润万象汇负一楼LG07号商铺 | NULL | 2022-07-09 14:37:43 |
| 7369 | 广南大润发 | 江西省 | 南昌市 | 江西省|南昌市|广场南路大润发 | NULL | 2022-07-09 14:37:43 |
| 7370 | 广南大润发 | 江西省 | 南昌市 | 江西省|南昌市|广场南路大润发 | NULL | 2022-07-09 14:37:43 |
| 7371 | 时代广场 | 江西省 | 南昌市 | 江西省|南昌市|红谷滩新区凤凰洲地铁万科时代广场一层 | Wi-Fi,点唱机,店内参观,手机点餐 | 2022-07-09 14:37:43 |
| 7372 | 时代广场 | 江西省 | 南昌市 | 江西省|南昌市|红谷滩新区凤凰洲地铁万科时代广场一层 | Wi-Fi,点唱机,店内参观,手机点餐 | 2022-07-09 14:37:44 |
| 7373 | 昌北机场 | 江西省 | 南昌市 | 江西省|南昌市|新建县昌北国际机场2号航站楼商业区域B-1-C2 | 点唱机,店内参观,手机点餐 | 2022-07-09 14:37:44 |
| 7374 | TY临时-武汉肯德基市场 | 江西省 | 南昌市 | 江西省|南昌市|null | 手机点餐 | 2022-07-09 14:37:44 |
| 7375 | 南昌高铁到达南 | 江西省 | 南昌市 | 江西省|南昌市|市辖区红谷滩新区九龙湖片区西客站南广场B2层 | 手机点餐 | 2022-07-09 14:37:44 |
| 7376 | 经开旭辉 | 江西省 | 南昌市 | 江西省|南昌市|1F-011编号商铺荷华路(富樱路)以东、双港大道以北、海棠北路以南、筠霁路以西旭辉广场一层 | 点唱机,店内参观,手机点餐 | 2022-07-09 14:37:44 |
| 7377 | 长胜园餐厅 | 江西省 | 南昌市 | 江西省|南昌市|南昌高新技术产业开发区紫阳大道99号江西师范大学瑶湖校区长胜园1楼东侧店面 | 手机点餐 | 2022-07-09 14:37:44 |
| 7378 | 新万寿宫 | 江西省 | 南昌市 | 江西省|南昌市|-1-1;B02-2-1号铺中山路以南、翠花街以西、船山路以北的万寿宫历史文化街区项目B02地块B02 | 手机点餐 | 2022-07-09 14:37:44 |
| 7379 | TY临时-武汉肯德基市场 | 江西省 | 南昌市 | 江西省|南昌市|null | 手机点餐 | 2022-07-09 14:37:44 |
| 7380 | 经开旭辉 | 江西省 | 南昌市 | 江西省|南昌市|1F-011编号商铺荷华路(富樱路)以东、双港大道以北、海棠北路以南、筠霁路以西旭辉广场一层 | 点唱机,店内参观,手机点餐 | 2022-07-09 14:37:44 |
| 7381 | 新万寿宫 | 江西省 | 南昌市 | 江西省|南昌市|-1-1;B02-2-1号铺中山路以南、翠花街以西、船山路以北的万寿宫历史文化街区项目B02地块B02 | 手机点餐 | 2022-07-09 14:37:44 |
| 7382 | 长胜园餐厅 | 江西省 | 南昌市 | 江西省|南昌市|南昌高新技术产业开发区紫阳大道99号江西师范大学瑶湖校区长胜园1楼东侧店面 | 手机点餐 | 2022-07-09 14:37:44 |
| 7383 | 南昌高铁到达南 | 江西省 | 南昌市 | 江西省|南昌市|市辖区红谷滩新区九龙湖片区西客站南广场B2层 | 手机点餐 | 2022-07-09 14:37:44 |
+------+-----------------------+----------+--------+-----------------------------------------------------------------------------------------------------------+--------------------------------+---------------------+
75 rows in set (0.28 sec)
【爬虫】Java爬取KFC全国门店信息的更多相关文章
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...
- Python爬虫项目--爬取自如网房源信息
本次爬取自如网房源信息所用到的知识点: 1. requests get请求 2. lxml解析html 3. Xpath 4. MongoDB存储 正文 1.分析目标站点 1. url: http:/ ...
- 通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
源代码:https://github.com/nnngu/LagouSpider 效果预览 思路 1.首先我们打开拉勾网,并搜索"java",显示出来的职位信息就是我们的目标. 2 ...
- 21天打造分布式爬虫-Selenium爬取拉钩职位信息(六)
6.1.爬取第一页的职位信息 第一页职位信息 from selenium import webdriver from lxml import etree import re import time c ...
- 初识python 之 爬虫:爬取双色球中奖号码信息
人生还是要有梦想的,毕竟还有python.比如,通过python来搞一搞彩票(双色球).注:此文仅用于python学习,结果仅作参考.用到知识点:1.爬取网页基础数据2.将数据写入excel文件3.将 ...
- Python爬虫项目--爬取某宝男装信息
本次爬取用到的知识点有: 1. selenium 2. pymysql 3 pyquery 正文 1. 分析目标网站 1. 打开某宝首页, 输入"男装"后点击"搜索&q ...
- 初识python 之 爬虫:爬取某电影网站信息
注:此代码仅用于个人爱好学习使用,不涉及任何商业行为! 话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)
先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...
- 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)
做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...
随机推荐
- 算法金 | Python 中有没有所谓的 main 函数?为什么?
大侠幸会,在下全网同名[算法金] 0 基础转 AI 上岸,多个算法赛 Top [日更万日,让更多人享受智能乐趣] 定义和背景 在讨论Python为何没有像C或Java那样的明确的main函数之前,让 ...
- vuex做购物车功能
先创建一个cart组件 <template> <div> <ListItem></ListItem> </div> </templat ...
- 用C++ Qt实现类似Photoshop的钢笔工具
因为工作上的需求,需要实现一个类似Photoshop里面的钢笔工具, 分析一下它的功能,包括: 1. 有两种点:节点和控制点,节点是构成图形的基本端点,控制点是影响贝塞尔曲线的系数. 2. 创建节点: ...
- rust程序设计(4)关于 trait | impl 相关的概念和疑问
trait是什么? Rust中的trait是一种定义可被多种类型实现的共享行为的方式.它类似于Java或C#中的接口.通过trait,你可以定义一组方法签名(有时包括默认实现),不同的类型可以实现这些 ...
- nordic——long range测试
简介:本案例测试了long range,注意nrf52系列芯片中,部分硬件是不支持CADE的,也就是不支持long range,如nrf52832就不支持long range.同时协议栈也是部分支持, ...
- perfers-color-scheme 使用简单介绍
perfers-color-scheme 简介 prefers-color-scheme 媒体查询属性用于检测用户操作系统是否使用深色模式. 属性值 dark 表示用户操作系统使用深色模式 light ...
- RAS非对称加解密-RAS加解密和签名和验签,密钥生成器(java代码)
RAS非对称加解密-RAS加解密和签名和验签,密钥生成器(java代码)RSA 算法是一种非对称加解密算法.服务方生成一对 RSA 密钥,即公钥 + 私钥,将公钥提供给调用方,调用方使用公钥对数据进行 ...
- mysql时间字段新增和修改默认时间,删除字段
mysql时间字段新增和修改默认时间,删除字段##新增字段ALTER TABLE tbl_test ADD COLUMN `create_time` DATETIME NULL DEFAULT CUR ...
- http/https请求中如何使用Token
简介 Token就像是一个暗号,使用它就可以访问一些需要认证的系统或者服务. 那么,如何在http(s)中使用Token值呢? 使用方法 在http请求的头部字段中添加key-value.key为&q ...
- nginx 反向代理(proxy)与负载均衡(upstream)应用实践
集群介绍 集群就是指一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行各自服务的独立服务器.这些服务器之间可以彼此通信,协同向 ...