【发布时间】:2020-05-10 16:21:29
【问题描述】:
我正在尝试使用 selenium 在 python 中进行网络抓取。该网站是一个运动结果页面,我的最终目标是在 csv(或将来的 xml)中获取完整的结果列表。网站代码是这样的:
<div class="sportName soccer">
<div class="event__header">
<div class="event_title">
<div class="event_titleBox">
<span class="event_title--type">"Country"</span>
<span class="event_title--name">"Competition"</span>
</div>
</div>
</div>
<div class="event_round">Day 1</div>
<div class="event_match">Match 1</div>
<div class="event_match">Match 2</div>
<div class="event_match">Match 3</div>
<div class="event_round">Day 2</div>
<div class="event_match">Match 1</div>
<div class="event_match">Match 2</div>
<div class="event_match">Match 3</div>
</div>
显示如下:
Country Competition
Day 1
Match 1
Match 2
Match 3
Day 2
Match 1
Match 2
Match 3
我的问题是当我尝试获取信息时,我无法在同一个变量中获取全部信息,我正在使用
results = driver.find_elements_by_xpath("//*[@class='sportName soccer']//*[@class='event__header']")
这将获取所有信息,但全部集中在一行中。如何在同一个变量中按顺序获取“event_titleBox”、“event_round”和“event_match”?
我可以通过在一个变体中分别抓取一个类来做到这一点,但是我得到的所有信息都很混乱,之后我不知道如何按正确的顺序排列......
有没有办法在 find_elements_by_xpath 中拾取多个类?
非常感谢
【问题讨论】:
-
试试这个
results = driver.find_elements_by_xpath("//*[contains(@class, 'event_titleBox') or contains(@class, 'event_round') or contains(@class, 'event_match')]")只是结合类 -
成功了!非常感谢! @class='abc' 和 contains(@class, 'abc') 有什么区别?
-
@class='abc'- 这意味着类应该相等abc,contains(@class, 'abc')- 这意味着类应该包含部分abc。从您的示例中,以下路径也将起作用//*[@class='event_titleBox' or @class='event_round' or @class='event_match'] -
谢谢!最后一个问题。是否有可能,一旦我在单独的行中获得包含所有信息的变量,将一个分组到其他行中?例如,我的意思是在“event_rounde”中获取“event_match”
-
我不明白你想要什么。您能否提供结果示例,您需要得到什么
标签: javascript python selenium xpath web-scraping