如何使用Python在表中删除特定信息?

时间:2017-09-03 16:26:56

标签: python python-3.x

到目前为止,这是我的代码:

import urllib
import urllib.request
from bs4 import BeautifulSoup 

def make_soup(url):

    page = urllib.request.urlopen(url)
    soupdata = BeautifulSoup(page, "html.parser")
    return soupdata

soup = make_soup('http://www.lassen.co.nz/pickandgo.php?fyear=q&teama=SAF#hrh')

table = soup.find_all('table')[1]

for record in  table.find_all('tr'):
    for data in record.find_all('td'):
        print(data.text)

目前它打印表格的内容,循环遍历所有列。我怎样才能使它能够专门抓取某一列和某一行?例如,如果我想要它抓住第1行和第1行第5列(目前有41-23的数据),怎么回事?我可以打印出确切的数据吗?谢谢。
here is the webpage

2 个答案:

答案 0 :(得分:2)

使用enumerate可以同时获取索引和数据:

import urllib
import urllib.request
from bs4 import BeautifulSoup


def make_soup(url):

    page = urllib.request.urlopen(url)
    soupdata = BeautifulSoup(page, "html.parser")
    return soupdata

soup = make_soup('http://www.lassen.co.nz/pickandgo.php?fyear=q&teama=SAF#hrh')

table = soup.find_all('table')[1]

for row, record in enumerate(table.find_all('tr')):
    for col, data in enumerate(record.find_all('td')):
        if row == 1 and col == 4:
            print(data.text)

请注意,索引从0开始,但由于您跳过标题行,因此您希望捕获索引1处的行。对于第五列,您需要索引4

答案 1 :(得分:1)

您无需查看所需数据的所有列和行。

首先准备-Skip

soup

从页面获取所有表格。

>>> import bs4
>>> import requests
>>> page = requests.get('http://www.lassen.co.nz/pickandgo.php?fyear=q&teama=SAF#hrh').content
>>> soup = bs4.BeautifulSoup(page, 'lxml')

您已经知道所需的表格是页面上的第一个,而是第二个。让我们给它一个名称以便于参考。

>>> tables = soup.findAll('table')

现在让我们得到它的行。

>>> SAF_vs_ALL_table = tables[1]

它的第一行实际上是一个标题。我们想要第二行。

>>> SAF_vs_ALL_rows = SAF_vs_ALL_table.findAll('tr') 

然后让我们获取第二行的列,然后查看第五列的HTML。

>>> SAF_vs_ALL_rows[1].text
'Sat, 26 Aug 2017RC South Africa v Argentina41-235:28-0SaltaA'

我们可以看到以下列方式提取第五列的内容是一件简单的事情。

>>> columns = SAF_vs_ALL_rows[1].findAll('td')
>>> columns[4]
<td class="cenb">41-23</td>

我注意到你在另一个答案的评论中提出的问题。您可以将此字符串放入变量中以供后续使用:

>>> columns[4].text
'41-23'

你说过你是新手。我们大多数人都从BeautifulSoup开始,它最适合许多任务。但是,您应该知道有其他选择。在这种情况下,最好的可能是scrapy。将页面的HTML放在score = columns[4].text 中就可以了。这就是它。

page