我正在用漂亮的汤编写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'
我已经看了漂亮的汤文档,但我不理解这一点。
1条答案
按热度按时间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
: