gpt4 book ai didi

python - 网络抓取表格到列表

转载 作者:行者123 更新时间:2023-12-04 08:37:04 25 4
gpt4 key购买 nike

我正在尝试从网页中提取表格。我已经设法将表中的所有数据放入一个列表中。然而,所有表格数据都被放入一个列表元素中。我需要帮助将“干净”的数据(即字符串,没有所有的 HTML 打包)从表的行中获取到它们自己的列表元素中。
所以,而不是...

list  = [<tr>
<th><a href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS"><img alt="TTAKBS.png" decoding="async" height="64" src="https://static.wikia.nocookie.net/escapefromtarkov_gamepedia/images/6/61/TTAKBS.png/revision/latest/scale-to-width-down/64?cb=20190519001904" width="64"/></a>
</th>
<th><a href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS">7.62x25mm TT AKBS</a>
</th>
<td>58
</td>
<td>12
</td>
<td>32]
我想...
list  = ['href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS"><img alt="TTAKBS.png" decoding="async" height="64" src="https://static.wikia.nocookie.net/escapefromtarkov_gamepedia/images/6/61/TTAKBS.png/revision/latest/scale-to-width-down/64?cb=20190519001904" width="64"',
'href="/7.62x25mm_TT_AKBS" title="7.62x25mm TT AKBS">7.62x25mm TT AKBS',
'58',
'12',
'32']
我的代码和 list可以使用以下方法进行复制。
#Import Modules
import re
import requests
from bs4 import BeautifulSoup

#Get page
cartridge_url = 'https://escapefromtarkov.gamepedia.com/7.62x25mm_Tokarev'
cartridge_page = requests.get(cartridge_url)
cartridge_soup = BeautifulSoup(cartridge_page.content, 'html.parser')

#This gets the rows of the table I want
list = cartridge_soup.find_all(lambda t: t.name =='tr')

#This gets rid of an element which is not useful
list = [n for n in dirty_temp_type if not 'class="va-navbox' in str(n)]

#I had hoped this might assemble a list..
list = [str(n) for n in list]

我正在学习 python,我想我掌握了 HTML,但我无法让 python 与我的 bs4.element.ResultSet 交互。 .我知道这不是一个复杂的解决方案,但在尝试了多种不同的方法后,我遇到了麻烦。我的“真正”最终目标是一个如下所示的列表......
list  = ['7.62x25mm_TT_AKBS',
'58',
'12',
'32']

尝试实现建议的解决方案:
---> 正如 AzyCrw4282 所建议的
顺便说一句,这是一个令人难以置信的用户名。
(i)
我 [认为我] 可以大致了解我应该做什么,但我没有正确实现它。
使用...
cartridge_table = cartridge_soup.find_all('table')
我得到了存储在 cartridge_table 中的 HTML 格式的所有正确数据.然而,运行...
for row in cartridge_table.find_all("tr")[:1]:
print([cell.get_text(strip=True) for cell in row.find_all("td")])
...返回...
ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
...并替换 find_allfind不能解决问题。
(ii)
我心不在焉地跑了...
for row in cartridge_soup.find_all("tr")[:1]:
print([cell.get_text(strip=True) for cell in row.find_all("td")])
...但这会返回一个空列表。
(iii)
您最初链接的问题定义了一个名为 header 的变量填写前 table具有必要数据的变量...
header = soup.find("b", text="Payable")
table = header.find_parent("table")
我不明白用什么来代替“应付”才能让它对我有用。
(iv)
我试图通过给它一个刺来否定(iii)中的上述问题......
cartridge_table = cartridge_soup.find_parent("table")

for row in cartridge_soup.find_all("tr")[:1]:
print([cell.get_text(strip=True) for cell in row.find_all("td")])
但它返回一个空列表。当我检查时,这是因为 cartridge_table 下没有存储任何内容多变的。
(五)
我试着跑...
header = cartridge_soup.find("b", text="Payable")
...并替换 "Payable"有各种看似明智的选择来看看会发生什么,但我一无所获。最终 header变量似乎总是空的。
示例: "Icon" , "Name" , "Fragmentation Chance" , "wikitable sortable" , "7.62x25mm TT LRN" , "7.62x25mm_TT_AKBS" .

最佳答案

我已经尝试解决问题,但页面上给出的表格似乎有问题 - 至少我是这么认为的。表的提取应该产生大小为 n 的元素对于给定的行数,但出于某种原因,它将所有行作为数组中的单个元素。我确实研究过,但并没有深入研究(而且我也没有时间)。
鉴于您只对第一行中的单元格感兴趣,那么在这种情况下,您可以通过使用 XPath 定位这些元素来轻松完成此操作。方法。这将很容易找到元素并产生您需要的值。 Xpath但是不适用于 BeautifulSoup .
为了解决这个问题,我最终使用了一种硬编码的方法来选择数组中所需的元素。这针对 name 的第一次提取列,然后是其他列。
代码

import re
import requests
from bs4 import BeautifulSoup
import urllib.request

#Get page
cartridge_url = 'https://escapefromtarkov.gamepedia.com/7.62x25mm_Tokarev'
page = urllib.request.urlopen(cartridge_url)
cartridge_soup = BeautifulSoup(page.read())
tables = cartridge_soup.findChildren('table')
my_table = tables[0]

cartridge_table = my_table.findChildren(['table','th', 'tr'])
dataArray = []
dataArray.append(str(cartridge_table[13]).split('</a>')[0][45:62].replace(" ","_"))
splitChar = str(cartridge_table[13]).split("</td>")

for data in splitChar[:3]:
dataArray.append(data[-3:-1])

print(dataArray)
['7.62x25mm_TT_AKBS', '58', '12', '32']
让我知道它是否解决了您的问题,或者它是否需要适应其他用例。

关于python - 网络抓取表格到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64753775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com