我有一张桌子,我正在使用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
答案 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。