为了账号安全,请及时绑定邮箱和手机立即绑定

Python BeautifulSoup 如何获取最新选择器的数据

Python BeautifulSoup 如何获取最新选择器的数据

HUH函数 2021-09-23 09:48:23
发送 python HTTP 请求后,它的响应(数据)有一个 html 页面,其中包含许多 ABCD 块。这是一个片段                   <tr>                        <td class="success"></td>                        <td class="truncate">ABCD</td>                        <td>12/18/2018 21:45</td>                        <td>12/18/2018 21:46</td>                        <td>10</td>                        <td>10</td>                        <td>100.0</td>                        <td><span class="label success">Success</span></td>                        <td>SMS</td>                        <td>                            <a data-id="134717" class="btn" title="Go">View</a>                        </td>                    </tr>我需要检索 ABCD 的最新数据 ID(在本例中为 134717,这个数字是动态的)。另请注意,有许多具有不同日期的 ABCD,我想要最新的 .我可以使用正则表达式并逐行完成。但我认为最好用 BeautifulSoup 来做。我试过这个它可以找到所有的 ABCD,但我不知道如何获得最新的:    soup = BeautifulSoup(data, "html.parser")    for i in soup.select("td.truncate"):        #print(i.text)        if i.text == "ABCD":            print ("Got it ", i.text)            id1 = soup.select_one("a.data-id")            print (id1)            parsed_url1 = urlparse(id1)
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您将需要dateutils 解析器。显然没有办法告诉哪个<td>有日期,所以你只需要遍历匹配的 tr 中的所有 td,并尝试解析日期时间,如果日期时间解析成功,只需将它附加到日期列表对于特定的 ID。在获得每个 ID 的所有日期后,您只需在它们上查找最新的日期即可。


from dateutil import parser as du_parser    

from collections import defaultdict

from bs4 import BeautifulSoup as BS


data = "<tr><td class=\"success\"></td><td class=\"truncate\">ABCD</td><td>12/18/2018 21:45</td><td>12/18/2018 21:46</td><td>10</td><td>10</td><td>100.0</td><td><span class=\"label success\">Success</span></td><td>SMS</td><td><a data-id=\"134717\" class=\"btn\" title=\"Go\">View</a></td></tr>"

b1 = BS(data, "html.parser")


td_of_interest = b1.find_all("td")

tr_that_contain_our_td = [x.parent for x in b1.find_all("td", string="ABCD")]


ids_dict = defaultdict(list)


# iterate over matched tr's to get their dates

for tr in tr_that_contain_our_td:

    extracted_id = tr.find("a")['data-id']


    for td in tr.find_all("td"):

        try:

            if len(td.contents) > 0:

                actual_date = du_parser.parse(td.contents[0])

                ids_dict[extracted_id].append(actual_date)

        except ValueError:

            pass  #nothing to do here


ids_dict = {k: max(v) for k, v in ids_dict.items()}


print(ids_dict)



查看完整回答
反对 回复 2021-09-23
  • 3 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号