【问题标题】:Web scraping more than one "brother" <div>网页抓取不止一个“兄弟”<div>
【发布时间】: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' - 这意味着类应该相等abccontains(@class, 'abc') - 这意味着类应该包含部分abc。从您的示例中,以下路径也将起作用//*[@class='event_titleBox' or @class='event_round' or @class='event_match']
  • 谢谢!最后一个问题。是否有可能,一旦我在单独的行中获得包含所有信息的变量,将一个分组到其他行中?例如,我的意思是在“event_rounde”中获取“event_match”
  • 我不明白你想要什么。您能否提供结果示例,您需要得到什么

标签: javascript python selenium xpath web-scraping


【解决方案1】:

总的来说,使用 css 会更好更干净:

.soccer .event__header ~ div

【讨论】:

    猜你喜欢
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多