0

I'm new to Python and I'm writing a webscraper that looks for <td> rows in a HTML table:

# 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]])

All it does is get values from 4 table '<td>'

The problem is, some of the tables don't have cols[2], cols[3] or cols[4]

Is there a way, that I can check if these exist?

Thanks

4

4 に答える 4

2

私は に完全に精通しているわけではありませんが、(他の方法でシーケンスのように見える本当に奇妙なオブジェクトでない限り)xpathの長さを確認できるはずです:cols

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

Python のもう 1 つの一般的なイディオムは、ただ試してみることです。

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.

最後に、colsが alistであると仮定すると、常に十分な長さであることを確認できます。

cols.extend(['']*5)

これにより、列が空の文字列で埋められ、少なくとも 5 列(通常はそれ以上) になります。

于 2013-02-05T15:48:09.487 に答える
0

多分あなたは言いたくcols = xpath.search(row, 'td')なかったのcols = xpath.search(row, '/td')ですか?(スラッシュなし)

于 2013-02-05T16:08:13.750 に答える
0
c.writerow([col[x] for x in range(0,len(col))])

また、「darkgrey.csv」ファイルを閉じることを忘れないでください。

于 2013-02-05T15:50:13.970 に答える
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]])
于 2013-02-05T15:57:10.467 に答える