我是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]
有没有办法可以检查这些是否存在?
由于
答案 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.
最后,假设cols
是list
,您可以始终确保它足够长:
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')
? (没有斜线)