Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用BeautifulSoup从表中的单元格提取值_Python_Beautifulsoup - Fatal编程技术网

Python 使用BeautifulSoup从表中的单元格提取值

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

我对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')
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()