最近用 selenium 做 Java 爬虫,虽然可以爬取到页面了,但是在元素定位上犯了难
我可以通过爬虫获取一个列表的所有元素遍历文本,但是不知道怎么精确定位到对应属性或者元素上获取文本内容,去网上看了挺久的教程也没整明白怎么做好,就我知道里面有提供什么方法,但是我却不知道具体怎么使用,或者是我按我的想法来测试往往都是得不到结果,尤其是里面有很多元素嵌套的时候,感觉自己根本无从下手
所以我就是想来问问各位,是怎么学习元素定位的,有没有学习的方法或者什么教程推荐一下,我想尽快上手然后做爬虫,先谢谢各位了
1
ospider 2023-04-25 17:06:40 +08:00 1
爬虫还是建议 Python ,你实在讨厌 Python 用 Go 也行。不是说 Java 不好,没那个生态,你非要搞的话,事倍功半。
|
2
rqxiao 2023-04-25 17:14:02 +08:00
浏览器 F12->Elements->选中元素右键->Copy xpath, Copy js path ,Copyxxxxxxxx
|
3
tiRolin OP @rqxiao 这个我学长也教我这么用,但是对于一个列表来说,他的 Xpath 不是会随着列表变化一直增加的吗?这样的话写出来的代码还具有通用性吗?还是说干脆来个 for 循环自己拼接 Xpath 语句?
|
4
krixaar 2023-04-25 17:18:20 +08:00
@ospider #1 用 selenium 哪个语言无所谓吧,api 都一样。
元素定位找 XPath 教程,再了解几个常见的 ExpectedConditions 就够了,实在不行还能像 2 楼那样直接右键复制。 |
6
fank99 2023-04-25 17:22:47 +08:00
@tiRolin 定位这个列表,然后遍历这个列表后继续在这个基础上解析。不明白的话,看看 scrapy 的 selector 怎么处理的。和一楼一样,我也建议使用 Python 。
|
7
tiRolin OP @rqxiao 像这样吗?
for (int i = 0; i < elements.size(); i++) { elements.get(i).findElement(By.xpath("//复制来的 xpath 路径")); //此处进行业务逻辑 } elements 指的是元素的集合 |
8
krixaar 2023-04-25 17:30:45 +08:00
@tiRolin #3 XPath 是可以一次性返回所有符合条件元素的,比如某个 ul 或者 ol 下面的所有 li ,在 Selenium 对应的就是 findelements by.xpath ,//ul[@id="xxx"]//li ,取下来的就是所有的 li 元素,一个 for 循环取数据就行了。
甚至,你直接在这个页面 F12 ,然后控制台敲 $x('//div[@class="reply_content flod"]') 都能把所有的回复的 div 给选出来。 |
9
mgLSSKozL359 2023-04-25 17:32:22 +08:00
我就是用 java 的。用了 Jsoup 。和传统的 jquery 差不多。反正就是通过各种选择器定位元素。
附上 pom 和示例代码: <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.13.1</version> </dependency> String html = EntityUtils.toString(response.getEntity(), "UTF-8").replace(" ", " "); Document document = Jsoup.parse(html); List<Element> trs = document.selectFirst("[class=onbuildshow]").selectFirst("[class=onbuildshow_contant colordg ft14]").selectFirst("[class=sjtd]").select("tr"); |
10
jorneyr 2023-04-25 17:37:45 +08:00
推荐使用 Jsoup
|
11
luzihang 2023-04-26 11:00:05 +08:00
元素定位看经验的。考虑网页未来可能出现的情况,尽量通过父子节点+文字含义定位。比如:'//label[contains(text(), "信用代码")]/following-sibling::input/@value'
|
12
ccw4wcc 2023-04-26 11:04:39 +08:00
webmagic
|