网页爬虫抓取百度图片( 爬取*敏*感*词*了百度你还真是鸡贼鼠标向下滚动)
优采云 发布时间: 2022-03-07 10:07网页爬虫抓取百度图片(
爬取*敏*感*词*了百度你还真是鸡贼鼠标向下滚动)
测试爬取*敏*感*词*图片
定义爬取百度斗图首页每篇文章URL的爬取规则对象
1 /**
2 * 斗图吧贴子的url
3 */
4 SpiderFunction doutubaTieZiUrl = spider -> {
5 // 文本爬取对象
6 TextSpider textSpider = (TextSpider) spider;
7 // 文本爬取规则 定位元素
8 textSpider.setReg("div:t_concleafix>*>a>href>*");
9 return textSpider.getData().getResult().stream()
10 // 爬取后的数据处理 因为可能存在相同引用的连接所以使用Set容器去重
11 .filter(url -> (!"#".equals(url)) && (!url.contains("?")) && (url.contains("/p/")))
12 .map(url -> url.startsWith("http") ? url : "https://tieba.baidu.com" + url
13 ).collect(Collectors.toSet());
14 };
15
16
在搜索爬虫规则的过程中,发现*敏*感*词*帖子列表页面的所有内容都被注释掉了,所以需要修改文字规则拦截部分的代码
过滤评论部分需要处理
编写一个爬取规则对象,爬取每篇文章的页数
1 /**
2 * *敏*感*词*贴子的每页的url
3 */
4 SpiderFunction doutubaTieZiPageUrl = spider -> {
5 Set urls = new HashSet();
6 String page = spider.getUrl();
7 TextSpider textSpider = (TextSpider) spider;
8 // 定位总页数位置
9 textSpider.setReg("li:l_reply_num>1>span>2");
10 List result = textSpider.getData().getResult();
11 // 循环生成某个贴子的所有页面的url
12 if (Lists.isValuable(result)) {
13 String endNum = result.get(0);
14 if (endNum.matches("^[0-9]+$")) {
15 for (int i = 1; i {
5 TextSpider textSpider = (TextSpider) spider;
6 textSpider.setReg("div:p_content>*>img>src>*");
7 return textSpider.getData().getResult().stream()
8 .map(url -> url.startsWith("http") ? url : spider.getUrl() + url)
9 .filter(SpiderCommonUtils::isImgUrl)
10 .collect(Collectors.toSet());
11 };
12
13
获取豆瓣的代码
1 /**
2 * 抓取斗图吧图片
3 */
4 @Test
5 public void testP(){
6 //String doutu = "https://tieba.baidu.com/f?kw=%E6%96%97%E5%9B%BE&ie=utf-8&pn=";
7 for (int i = 0; i {
56 if (jsonMap.containsKey(tag)) {
57 result.addAll(getDataList(jsonMap.get(tag).toString(),endTag));
58 }
59 });
60 }
61 }else{
62 JSON json = JSONUtil.parse(source);
63 if (json instanceof JSONObject) {
64 if (((JSONObject) json).containsKey(reg)) {
65 result.add(((JSONObject) json).get(reg).toString());
66 }
67 } else if (json instanceof JSONArray) {
68 ((JSONArray) json).toList(Map.class).stream().forEach(jsonMap -> {
69 if (jsonMap.containsKey(reg)) {
70 result.add(jsonMap.get(reg).toString());
71 }
72 });
73 }
74 }
75 return result;
76 }
77}
78
79
编写爬取规则对象
1 /**
2 * 百度搜图的图片url
3 */
4 SpiderFunction baiDuSouImgUrl = spider -> {
5 AjaxSpider ajaxSpider = (AjaxSpider) spider;
6 return ajaxSpider.getData().getDataList("data.hoverURL");
7 };
8
9
爬取代码
<p>1 /**
2 * 抓取百度图片搜索
3 */
4 @Test
5 public void testPt(){
6 String image = "https://image.baidu.com/search/acjson?";
7 //搜索的关键字
8 String queryWords = "米老鼠";
9 // 参数
10 Map parms = new HashMap();
11 parms.put("tn", "resultjson_com");
12 parms.put("ipn", "rj");
13 parms.put("ct", "201326592");
14 parms.put("is", "");
15 parms.put("fp", "result");
16 parms.put("queryWord", queryWords);
17 parms.put("cl", "2");
18 parms.put("lm", "-1");
19 parms.put("ie", "utf-8");
20 parms.put("oe", "utf-8");
21 parms.put("adpicid", "");
22 parms.put("st", "-1");
23 parms.put("z", "");
24 parms.put("ic", "0");
25 parms.put("hd", "");
26 parms.put("latest", "");
27 parms.put("copyright", "");
28 parms.put("word", queryWords);
29 parms.put("s", "");
30 parms.put("se", "");
31 parms.put("tab", "");
32 parms.put("width", "");
33 parms.put("height", "");
34 parms.put("face", "0");
35 parms.put("istype", "2");
36 parms.put("qc", "");
37 parms.put("nc", "1");
38 parms.put("fr", "");
39 parms.put("expermode", "");
40 parms.put("rn", "30");
41 parms.put("gsm", "");
42 parms.put(String.valueOf(System.currentTimeMillis()),"");
43 for (int i = 0; i