python——我不明白为什么BeautifulSoup提供的是第一个链接而不是第二个链接,而且第一个选择一个链接不会像第二个链接那样工作

ckocjqey  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(494)

我正在用漂亮的汤编写python代码。我现在让它工作了,但我不知道它为什么工作,我很确定这会让我在前进的过程中遇到问题。有人能帮我理解吗?
我下载了一个html文件,在一个表中有数百个项目。以下是一个表项:

<td class="gsc_a_t">
  <a href="www.the_first_link.com" class="gsc_a_at">The title that goes with the link</a>
  <div class="gs_gray">author1, author 2, author 3</div>
  <div class="gs_gray">
    ”source for the item”
    <span class="gs_oph">, 2020</span>
  </div>
</td>
<td class="gsc_a_c">
  <a href="www.the_second_link.com” class="gsc_a_ac gs_ibl">2</a>
</td>
<td class="gsc_a_y">
  <span class="gsc_a_h gsc_a_hc gs_ibl">2020</span>
</td>

以下是每个表项的代码:

for i in table_results:
    item = i
    first_link = i.a['href']
    title = i.a.text
    authors = i.select_one('.gs_gray').text
    source = i.select('.gs_gray')[-1].text
    second_link = i.select_one('.gsc_a_ac')['href']
    citations = i.select_one('.gsc_a_ac').text
    year = i.select_one('.gsc_a_y').text

当我运行它时,我想要 first_link 要记录第一个链接,请执行以下操作: second_link 去拿第二个。他们正在这样做。。。但我不知道为什么。为什么不呢 first link 抓住 i.a['href'] 从第二个链接而不是第一个链接?两者都有相同的特征 <a href=" ... ></a> 建筑。还有,我试着 first_link = i.select_one('.gsc.a.at')['href'] 与捕获第二个链接的方式类似,但这不起作用。它引用“return self.attrs[key]”,并说keyerror:'href'
我已经看了漂亮的汤文档,但我不理解这一点。

jpfvwuh4

jpfvwuh41#

为什么第一个链接不从第二个链接而不是第一个链接捕获i.a['href']?
我手头没有引用,但是使用点符号选择具有特定名称的第一个元素。这相当于使用 select_one 使用css选择器。这导致我们: first_link = i.select_one('.gsc.a.at')['href'] ... keyerror说:“href”
那是因为 select_one 选择满足所述条件的第一个元素(在本例中,具有指定的类属性值)。在html中,满足该条件的第一个元素是第一个 td ,它本身没有 href 属性你要找的是那个孩子 a 其中的要素 td :

i.select_one('.gsc_a_t a')['href']

相关问题