网页爬虫抓取百度图片( 爬取*敏*感*词*了百度你还真是鸡贼鼠标向下滚动)

优采云 发布时间: 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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线