Python 使用BeautifulSoup从表中的单元格提取值
我对Python和所有东西都非常陌生,我试图让BeautifulSoup从这个页面的这个表中的一个特定单元格返回一个数值 (或同一wiki中的任何其他类似页面) 现在我所拥有的只是:Python 使用BeautifulSoup从表中的单元格提取值,python,beautifulsoup,Python,Beautifulsoup,我对Python和所有东西都非常陌生,我试图让BeautifulSoup从这个页面的这个表中的一个特定单元格返回一个数值 (或同一wiki中的任何其他类似页面) 现在我所拥有的只是: url = ('http://unisonleague.wikia.com/wiki/Brynhildr,_Dual_Lancer_(Gear)') r = requests.get(url) data = r.text soup = BeautifulSoup (data , 'html.parser') tab
url = ('http://unisonleague.wikia.com/wiki/Brynhildr,_Dual_Lancer_(Gear)')
r = requests.get(url)
data = r.text
soup = BeautifulSoup (data , 'html.parser')
table = soup.find (id='mw-content-text')
rows = table.find ('tr')
cells = rows.findAll('td')
我想要的值来自“Max Unison Chance”旁边的单元格,所以在本例中为“10004”
<td colspan="2" style="background-color:#5B4F3D; color:#ffffff;"> 10004 </td>
及
但它只返回了一个空列表或什么也没有返回
我不太确定接下来该怎么办,我考虑过/尝试过按行数(我相信这是第[14]行)和单元格进行索引,但我似乎无法正确地获取代码?而不是像您这样采用自顶向下的方法使用html的树结构。我假设您希望将其推广到其他类似格式的页面,因此您可以将其中包含“Max Unison Chance”的单元格作为锚定点,然后遍历Beauty Soup创建的解析树,以到达您正在查找的单元格。下面是包含描述单元格和您要查找的单元格的html/
<td style="height: 29px; background-color:#3F2D18; color:#ffffff; font-size:7pt;"> <b><span style="cursor:help;" title="Maximum stats used during a Unison Chance. It is the total of both stats with +198.">Max Unison Chance</span>:</b>
</td><td colspan="2" style="background-color:#5B4F3D; color:#ffffff;"> 10004
</td>
这将得到一个元素,其中包含文本“Max Unison Operage”。
如果然后查看包含要查找的编号的标记相对于当前元素的位置。您可以看到,您需要向上移动三个节点,才能到达包含10004的单元格旁边的元素
要导航到此单元格,可以使用现有元素的父属性并使用属性链接:
great_祖父母=element.parent.parent.parent.parent
我们现在需要通过以下方式获得曾祖父母的下一个兄弟姐妹:
target_cell = great_grandparent.next_sibling
最后,获取元素的文本值并将其清除:
result = target_cell.text.strip()
然后把它们放在一起:
from bs4 import BeautifulSoup
import requests
url = ('http://unisonleague.wikia.com/wiki/Brynhildr,_Dual_Lancer_(Gear)')
r = requests.get(url)
data = r.text
soup = BeautifulSoup (data , 'html.parser')
element= soup.find(text='Max Unison Chance')
result = element.parent.parent.parent.next_sibling.text.strip()
另一种方法是使用解析顺序而不是树顺序,这样您就可以将结果替换为:
result = cell.next.next.next.strip()
由于next属性根据您正在使用的解析器的工作方式引用下一个元素,因此更好地使用xpathTry使示例(最小、完整和可验证)[即它应该独立运行。
result=element.find_next('td')).text
在这里也会很好,我想。谢谢你这么彻底的回答!它真的很好用,我真的理解了一切。
result = target_cell.text.strip()
from bs4 import BeautifulSoup
import requests
url = ('http://unisonleague.wikia.com/wiki/Brynhildr,_Dual_Lancer_(Gear)')
r = requests.get(url)
data = r.text
soup = BeautifulSoup (data , 'html.parser')
element= soup.find(text='Max Unison Chance')
result = element.parent.parent.parent.next_sibling.text.strip()
result = cell.next.next.next.strip()