美搜HTML抓取,如何在tbody中得到排在后面的字符

美搜HTML抓取,如何在tbody中得到排在后面的字符,html,python-3.x,beautifulsoup,Html,Python 3.x,Beautifulsoup,我很有兴趣学习如何抓取一个网站。现在我在网站上学习如何刮桌子。我用过漂亮的乌苏 我有一个简单的HTML表要解析,但不知怎么的,我试图在tbody中获取行,但总是在“thead”中获取单词。我想知道是否有人会看看这是怎么回事。因此,我已经从HTML表中创建了rows对象: <table id="companyTable" class="table table--zebra table-content-page width-block dataTable no-footer" role="gr

我很有兴趣学习如何抓取一个网站。现在我在网站上学习如何刮桌子。我用过漂亮的乌苏

我有一个简单的HTML表要解析,但不知怎么的,我试图在tbody中获取行,但总是在“thead”中获取单词。我想知道是否有人会看看这是怎么回事。因此,我已经从HTML表中创建了rows对象:

<table id="companyTable" class="table table--zebra table-content-page width-block dataTable no-footer" role="grid" aria-describedby="companyTable_info" style="width: 868px;">
<thead>
    <tr role="row">
        <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 41px;">No</th>
        <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 224px;">Kode/Nama Perusahaan</th>
        <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 267px;">Nama</th>
        <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 187px;">Tanggal Pencatatan</th>
    </tr>
</thead>
<tbody>
    <tr role="row" class="odd">
        <td class="text-center">1</td>
        <td class="text-center">AALI</td>
        <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=AALI">Astra Agro Lestari Tbk</a></td>
        <td>09 Des 1997</td>
    </tr>
    <tr role="row" class="even">
        <td class="text-center">2</td>
        <td class="text-center">ABBA</td>
        <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=ABBA">Mahaka Media Tbk</a></td>
        <td>03 Apr 2002</td>
    </tr>

您只需要
tbody
标记中的第一个
tr
。所以我用这个:

first_row = s.find('tbody').find('tr')
其中
s
是我的汤。下面是一个例子:

>>> html = """<table id="companyTable" class="table table--zebra table-content-page width-block dataTable no-footer" role="grid" aria-describedby="companyTable_info" style="width: 868px;">
... <thead>
...     <tr role="row">
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 41px;">No</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 224px;">Kode/Nama Perusahaan</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 267px;">Nama</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 187px;">Tanggal Pencatatan</th>
...     </tr>
... </thead>
... <tbody>
...     <tr role="row" class="odd">
...         <td class="text-center">1</td>
...         <td class="text-center">AALI</td>
...         <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=AALI">Astra Agro Lestari Tbk</a></td>
...         <td>09 Des 1997</td>
...     </tr>
...     <tr role="row" class="even">
...         <td class="text-center">2</td>
...         <td class="text-center">ABBA</td>
...         <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=ABBA">Mahaka Media Tbk</a></td>
...         <td>03 Apr 2002</td>
...     </tr>
... """
>>> s = BeautifulSoup(html)
>>> first_row = s.find('tbody').find('tr')
>>> first_row
<tr class="odd" role="row">
<td class="text-center">1</td>
<td class="text-center">AALI</td>
<td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=AALI">Astra Agro Lestari Tbk</a></td>
<td>09 Des 1997</td>
</tr>
>html=”“”
... 
...     
不
…Kode/Nama Perusahaan
…纳米
…唐加尔·彭卡塔坦
...     
... 
... 
...     
1.
……啊
...         
…1997年9月
...     
...     
2.
…阿巴
...         
……2002年4月3日
...     
... """
>>>s=美化组(html)
>>>第一行=s.find('tbody')。find('tr'))
>>>第一排
1.
阿利
09 Des 1997
它之所以有效,是因为
find
只返回与解决问题匹配的第一个元素 如果我理解正确,您只需要从中获取表数据。然而,通过检查站点并使用分析请求和响应,我刚刚发现站点正在使用JS,并使用JS填充表,其中包含来自的响应

换言之,你本可以

导入请求
url=”https://www.idx.co.id/umbraco/Surface/Helper/GetEmiten?emitenType=s"
response=requests.get(url)
打印(response.json())
你应该从中学到什么
检查页面元素和请求/响应,以了解获取数据的最简单方法。我建议的工具是,但您可以使用最适合自己的浏览器。

谢谢您的回复。但我认为我犯了一个错误,我需要刮,但我写“解析”。我很抱歉(但是,我也很想学习解析:)您可以重新编写您的问题,以便我们可以帮助您。您可以在返回的json上使用pd.DataFrame,但请注意,此json只返回两列,没有返回最后一列。剩余的数据可能在另一个请求中。但这里的要点是:他搜索的数据不在返回的页面上,而是在另一个请求上。
first_row = s.find('tbody').find('tr')
>>> html = """<table id="companyTable" class="table table--zebra table-content-page width-block dataTable no-footer" role="grid" aria-describedby="companyTable_info" style="width: 868px;">
... <thead>
...     <tr role="row">
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 41px;">No</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 224px;">Kode/Nama Perusahaan</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 267px;">Nama</th>
...         <th class="sorting_disabled" rowspan="1" colspan="1" style="width: 187px;">Tanggal Pencatatan</th>
...     </tr>
... </thead>
... <tbody>
...     <tr role="row" class="odd">
...         <td class="text-center">1</td>
...         <td class="text-center">AALI</td>
...         <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=AALI">Astra Agro Lestari Tbk</a></td>
...         <td>09 Des 1997</td>
...     </tr>
...     <tr role="row" class="even">
...         <td class="text-center">2</td>
...         <td class="text-center">ABBA</td>
...         <td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=ABBA">Mahaka Media Tbk</a></td>
...         <td>03 Apr 2002</td>
...     </tr>
... """
>>> s = BeautifulSoup(html)
>>> first_row = s.find('tbody').find('tr')
>>> first_row
<tr class="odd" role="row">
<td class="text-center">1</td>
<td class="text-center">AALI</td>
<td><a href="/perusahaan-tercatat/profil-perusahaan-tercatat/detail-profile-perusahaan-tercatat/?kodeEmiten=AALI">Astra Agro Lestari Tbk</a></td>
<td>09 Des 1997</td>
</tr>