【问题标题】:How to extract the value from the <td> by using selenium如何使用 selenium 从 <td> 中提取值
【发布时间】:2021-07-19 06:13:09
【问题描述】:

所以我使用 selenium webdriver 通过(class_name、tag_name、Xpath、css_selector)从网站解析日期,我所有获取数据的尝试都失败了。在这个例子中,我正在尝试使用 BS4。我得到的只是来自“th”的文本。如何从“td”中获取文本?

driver.get(slot)
html = driver.page_source
soup  = BeautifulSoup(html, 'html.parser')
table = soup.find_all('tr')
for x in table:
    print(x.get_text())`enter code here

html

<table data-v data-qa="table" class"table">
   <tr data-v>
      <th data-v> Name </th>
      <th data-v> Last_name </th>
      <th data-v> Phone </th>
      <th data-v> City </th>
      <th data-v> Salary </th>
      </tr data-v>
   <tr data-v data-qa="table-row">
      <td data-v class="table-name not-editable">Tetyana</td>
      <td data-v class="table-last-name not-editable">Ferguson</td>
      <td data-v class="table-phone not-editable">252-823-1658</td>
      <td data-v class="table-city not-editable">Tarboro</td>
      <td data-v class="table-salary not-editable">10000</td>
      </tr data-v>
   <tr data-v data-qa="table-row">
      <td data-v class="table-name not-editable">Alyonka</td>
      <td data-v class="table-last-name not-editable">Andrews</td>
      <td data-v class="table-phone not-editable">603-608-7504</td>
      <td data-v class="table-city not-editable">Northwood</td>
      <td data-v class="table-salary not-editable">12000</td>
      </tr data-v>
</table>

【问题讨论】:

  • 我不明白你为什么需要使用 BeautifulSoup...只需使用 selenium 来找到你想要的元素(使用一些定位器 - 在你的情况下,xpath 或类名),然后获取文本那个元素

标签: python python-3.x selenium beautifulsoup webdriver


【解决方案1】:

你已经把“tr”放在soup.find_all('tr') 所以你 tr(table) 标题。如果你把 'td' 放在那里,你会得到 td(row) 数据。读取表格时,你也可以尝试 pandas.read_html在许多情况下都会有帮助的方法。

import pandas as pd
from bs4 import BeautifulSoup
html_src="""
<table data-v data-qa="table" class"table">
   <tr data-v>
      <th data-v> Name </th>
      <th data-v> Last_name </th>
      <th data-v> Phone </th>
      <th data-v> City </th>
      <th data-v> Salary </th>
      </tr data-v>
   <tr data-v data-qa="table-row">
      <td data-v class="table-name not-editable">Tetyana</td>
      <td data-v class="table-last-name not-editable">Ferguson</td>
      <td data-v class="table-phone not-editable">252-823-1658</td>
      <td data-v class="table-city not-editable">Tarboro</td>
      <td data-v class="table-salary not-editable">10000</td>
      </tr data-v>
   <tr data-v data-qa="table-row">
      <td data-v class="table-name not-editable">Alyonka</td>
      <td data-v class="table-last-name not-editable">Andrews</td>
      <td data-v class="table-phone not-editable">603-608-7504</td>
      <td data-v class="table-city not-editable">Northwood</td>
      <td data-v class="table-salary not-editable">12000</td>
      </tr data-v>
</table>
"""

选项 1:

df=pd.read_html(html_src)
print(df[0].head(10))
#output
 Name Last_name         Phone       City  Salary
0  Tetyana  Ferguson  252-823-1658    Tarboro   10000
1  Alyonka   Andrews  603-608-7504  Northwood   12000

选项 2:

soup=BeautifulSoup(html_src)
for each in soup.find_all("td"):
    print(each.get_text())
#output:
Tetyana
Ferguson
252-823-1658
Tarboro
10000
Alyonka
Andrews
603-608-7504
Northwood
12000

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 2021-12-29
    • 1970-01-01
    • 2021-12-28
    • 2021-10-07
    • 1970-01-01
    • 2017-05-01
    • 2012-02-05
    相关资源
    最近更新 更多