使用Python和BeautifulSoup查找某些表格单元格值,然后打印整行?

时间:2015-11-16 21:15:58

标签: python beautifulsoup

我有一张桌子,我正在使用BeautifulSoup进行刮擦,当某个单元格有特定的字符串时,我试图让它打印整行。下面的代码绝对没有打印,我无法弄清楚原因。如果我没有for循环并且我只是打印数据变量,那么我会收到大量信息,所以它与我的for循环有关。

问题是,我永远不会知道" Check"它将会出现在我的桌子中或有多少次出现在我的桌子上,所以我不能只看一下索引。我看过Using Python and BeautifulSoup to Parse a Table,但看起来它只是寻找标签,而不是特定的字符串。我尝试使用这个信息:http://www.briancarpio.com/2012/12/02/website-scraping-with-python-and-beautiful-soup/,但它确切地知道要与之交谈的索引,所以这对我来说没有用。

有什么想法吗?

nextpage=logged_in.read() #let's read the page once we get logged in
soup=BeautifulSoup(nextpage, "lxml") #BeautifulSoup told me to do this
table = soup.findAll("table", {'class':'table2'}) #Find the table we want to work with
data = [[td.findChildren(text=True) for td in tr.findAll("td")] for tr in table] #Find the cells for each table row

for line in table: #if you see a line in the table
    if line.find('Check'): #and you find the specific string
        print line #print it 
print "Hey, this did run!" #debug statement

1 个答案:

答案 0 :(得分:1)

有两个可能的问题。

第一个(也是最有可能的)是你用标签混淆标签。在你的代码中你有

for line in table: #if you see a line in the table
    if line.find('Check'): #and you find the specific string
        print line #print it 

第一行为您提供line标签。您正在使用 BeautifulSoup 而不是python的find方法,因此您实际上正在寻找名为Check标记,而不是字符串"检查"。没有Check标签,因此打印线永远不会被执行。

第二个选项是你实际上使用了python find方法,该方法将返回单词&#34; Check&#34;的位置。在字符串中。由于Check是标记<span style="color:green">Check</span>中唯一的字符串,因此Python find将返回0,因此您的if语句将为false。 (我不认为这是正在发生的事情,但你总是需要小心,你希望0代表false而不是0)

我会将您的代码更改为以下内容并运行它:

for line in table: #if you see a line in the table
    if line.get_text().find('Check') > -1 : #and you find the specific string
         print line #print it 

此代码执行get_text()以从标记中获取字符串,然后执行Python字符串find以查看是否&#34;检查&#34;在字符串中。如果不是,它将返回-1。