检查值是否存在

时间:2013-02-05 15:46:00

标签: python

我是Python新手,我正在编写一个在HTML表格中查找<td>行的webscraper:

# open CSV with URLS to scrape
csv_file = csv.reader(open('urls.csv', 'rb'), delimiter=',')

names = []
for data in csv_file:
    names.append(data[0])

for name in names:
   html = D.get(name);
   html2 = html
   param = '<br />';
   html2 = html2.replace("<br />", " | ")
   print name

   c = csv.writer(open("darkgrey.csv", "a"))
   for row in xpath.search(html2, '//table/tr[@class="bgdarkgrey"]'):
       cols = xpath.search(row, '/td')
       c.writerow([cols[0], cols[1], cols[2], cols[3], cols[4]])

所有这一切都是从4个表'<td>'

中获取值

问题是,有些表没有cols[2]cols[3]cols[4]

有没有办法可以检查这些是否存在?

由于

4 个答案:

答案 0 :(得分:2)

我对xpath并不完全熟悉,但你应该能够检查cols的长度(只要它不是一个看起来像序列的真正奇怪的对象其他方式):

 if len(cols) >= 5:
    ...

另一个常见的python习惯是试试看。

try:
    c.writerow([cols[0], cols[1], cols[2], cols[3], cols[4]])
except IndexError:
    #failed because `cols` isn't long enough.  Do something else.

最后,假设colslist,您可以始终确保它足够长:

cols.extend(['']*5)

将使用空字符串填充列,以便至少5列(通常更多)。

答案 1 :(得分:0)

c.writerow([col[x] for x in range(0,len(col))])

也不要忘记关闭“darkgrey.csv”文件!

答案 2 :(得分:0)

另一种可能的方法

c.writerow([cols[0], cols[1], '' if not(cols[2]) else cols[2], '' if not(cols[3]) else cols[3], '' if not(cols[4]) else cols[4]])

答案 3 :(得分:0)

也许您想说cols = xpath.search(row, 'td')而不是cols = xpath.search(row, '/td')? (没有斜线)