python - <for> 循环的切片函数

标签 python html web-scraping beautifulsoup slice

我是一名编码初学者,在装有 Visual Code Studio 的 Windows 10 上使用 Python 3.7.1。

作为练习,我试图从网页中抓取一些按表格组织的数据。

现在,我只想提取一些嵌套在 <td valign="top" style="width:25%;">Parte edibile, %</td><td align="left" valign="top" style="font-weight:bold;">75</td>值。作为分隔符,我有 <td> ... </td>

我确实尝试了很多方法只获取每一行的第一行和第二行,因为第三行对我来说不感兴趣,这只是浪费我不需要的内存。

为此,我使用了一个“for”循环,但正如我通过 BeautifulSoup 电子表格所了解的那样,当它需要一个循环时,每一行的所有嵌套参数都合并为一个,因此如果我想要 slice [0: 1] = >> 第一个和第二个“字符串”参数 <td> </td> , 是不可能的。

这是简单的循环“for”:

for alim in soup.find_all('td')[0:1]: return alim.text

我说的对吗?任何人都可以向我提出一些更聪明的解决方案来解决我的问题?

提前感谢您的任何建议。 最大

最佳答案

如果我没理解错的话,你的表格有超过 3 列,而你只对前两列感兴趣。

要从前两列中提取数据,您有多种选择。一种是使用 CSS 选择器:

data = '''
    <table>
    <tr>
        <td valign="top" style="width:25%;">I. Parte edibile, %</td>
        <td align="left" valign="top" style="font-weight:bold;">I. 75</td>
        <td>This doesn't interest me</td>
    </tr>
    <tr>
        <td valign="top" style="width:25%;">II. Parte edibile, %</td>
        <td align="left" valign="top" style="font-weight:bold;">II. 75</td>
        <td>II. This doesn't interest me</td>
    </tr>
    <tr>
        <td valign="top" style="width:25%;">III. Parte edibile, %</td>
        <td align="left" valign="top" style="font-weight:bold;">III. 75</td>
        <td>III. This doesn't interest me</td>
    </tr>
    </table>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'html.parser')

for col1, col2 in zip(soup.select('td:nth-of-type(1)'), soup.select('td:nth-of-type(2)')):
    print('{: <25} {}'.format(col1.text, col2.text))

打印:

I. Parte edibile, %       I. 75
II. Parte edibile, %      II. 75
III. Parte edibile, %     III. 75

或者你可以使用列表切片:

rows = []
for tr in soup.select('tr'):
    rows.append([td.text for td in tr.select('td')[0:2]])

for row in rows:
    print('{: <25} {}'.format(*row))

编辑:要解析页面 http://www.bda-ieo.it/test/ComponentiAlimento.aspx?Lan=Ita&foodid=1300_2,您可以使用以下代码:

from bs4 import BeautifulSoup
import requests

url = 'http://www.bda-ieo.it/test/ComponentiAlimento.aspx?Lan=Ita&foodid=1300_2'

soup = BeautifulSoup(requests.get(url).text, 'html.parser')

for col1, col2 in zip(soup.select('#tblComponenti > tr.testonormale > td:nth-of-type(1)'), soup.select('#tblComponenti > tr.testonormale > td:nth-of-type(2)')):
    print('{: <70} {}'.format(col1.text, col2.text))

打印:

Parte edibile, %                                                       75
Energia, ricalcolata, kJ                                               406
Energia, Ric con fibra, kJ                                             406
Energia, ricalcolata, kcal                                             96
Energia, Ric con fibra, kcal                                           96
Proteine totali, g                                                     16,8
   Proteine animali, g                                                 16,8
   Proteine vegetali, g                                                0,0
Lipidi totali, g                                                       2,6
   Lipidi animali, g                                                   2,6
   Lipidi vegetali, g                                                  0,0
Colesterolo, mg                                                        61
Carboidrati disponibili (MSE), g                                       1,5
   Amido (MSE), g                                                      0,0
   Carboidrati solubili (MSE), g                                       1,5
Fibra alimentare totale, g                                             0,0
Alcol, g                                                               0,0
Acqua, g                                                               76,5
Ferro, mg                                                              2,8
Calcio, mg                                                             148
Sodio, mg                                                              104
Potassio, mg                                                           278
Fosforo, mg                                                            196
Zinco, mg                                                              4,20
Magnesio, mg                                                           22
Rame, mg                                                               1,00
Selenio, µg                                                            37,0
Cloro, mg                                                              130
Iodio, µg                                                              29
Manganese, mg                                                          0,07
Zolfo, mg                                                              150
Vitamina B1, Tiamina, mg                                               0,06
Vitamina B2, Riboflavina, mg                                           0,26
Vitamina C, mg                                                         0
Niacina, mg                                                            14,00
Vitamina B6, mg                                                        0,14
Folati totali, µg                                                      9
Acido pantotenico, mg                                                  0,65
Biotina, µg                                                            6,0
Vitamina B12, µg                                                       0,6
Retinolo equivalente                                                   32
   Retinolo eq. (RE), µg                                               32
   Retinolo, µg                                                        tr
   ß-carotene eq., µg                                                  0,29
Vitamina E (ATE), mg                                                   11,00
Vitamina D, µg                                                         1,30
Acidi grassi saturi totali, g                                          0,00
Somma degli acidi butirrico, caproico, caprilico e caprico, g          0,00
Acido laurico, g                                                       0,14
Acido miristico, g                                                     1,01
Acido palmitico, g                                                     0,13
Acido stearico, g                                                      tr
Acido arachidico, g                                                    0,00
Acido beenico, g                                                       0,40
Acidi grassi monoinsaturi totali, g                                    0,00
Acido miristoleico, g                                                  0,10
Acido palmitoleico, g                                                  0,17
Acido oleico, g                                                        0,01
Acidi eicosenoico, g                                                   0,01
Acido erucico, g                                                       0,85
Acidi grassi polinsaturi totali, g                                     0,01
Acido linoleico, g                                                     0,01
Acido linolenico, g                                                    tr
Acido arachidonico, g                                                  0,27
Acido eicosapentaenoico (EPA), g                                       0,52
Acido decosaesaenoico (DHA), g                                         0,04
Altri acidi grassi polinsaturi, g                                      175
Triptofano, mg                                                         726
Treonina, mg                                                           823
Isoleucina, mg                                                         1330
Leucina, mg                                                            1379
Lisina, mg                                                             349
Metionina, mg                                                          183
Cistina, mg                                                            595
Fenilalanina, mg                                                       425
Tirosina, mg                                                           759
Valina, mg                                                             758
Arginina, mg                                                           675
Istidina, mg                                                           919
Alanina, mg                                                            1764
Acido aspartico, mg                                                    2261
Acido glutammico, mg                                                   722
Glicina, mg                                                            460
Prolina, mg                                                            650
Serina, mg                                                             1,5
Glucosio, g                                                            0,0
Fruttosio, g                                                           0,0
Galattosio, g                                                          0,0
Saccarosio (MSE), g                                                    0,0
Maltosio (MSE), g                                                      0,0

关于python - <for> 循环的切片函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57508896/

相关文章:

python - 如何在 python 中创建嵌套列表?

python - 在 PyCharm 中安装 airflow package extras

html - 使div宽度匹配内容

python - 我的美丽汤刮刀无法按预期工作

php - 从实现 AJAX 分页的所有 asp.net 页面中抓取数据

python - 如何检查数组的所有元素是否都在两个值之间

Python:将项目追加到列表N次

html - 为什么某些 DOCTYPE 声明会导致 100% 高度的表格和 div 停止工作?

javascript - Canvas fillRect 不工作

python - 使用 Scrapy shell 抓取 JSON 文件时终端窗口自动关闭