在Python2.7中使用lxml进行网页抓取时,缺少一列并减少空白/换行

在Python2.7中使用lxml进行网页抓取时,缺少一列并减少空白/换行,python,csv,web-scraping,lxml,Python,Csv,Web Scraping,Lxml,我正在尝试使用python将该页面中最大的表转换为csv。我基本上是在听答案 但我面临两个问题: 执行价格的列丢失 由于异常字符串包含大量“\r”并以单个“\n”结尾,因此将数据写入csv时未对齐。这会在csv 下面是我正在使用的代码。请帮我解决这两个问题 from urllib2 import Request, urlopen from lxml import etree import csv ourl = "http://www.nseindia.com/live_market/dyn

我正在尝试使用python将该页面中最大的表转换为
csv
。我基本上是在听答案

但我面临两个问题:

  • 执行价格的列丢失
  • 由于异常字符串包含大量“\r”并以单个“\n”结尾,因此将数据写入csv时未对齐。这会在
    csv
下面是我正在使用的代码。请帮我解决这两个问题

from urllib2 import Request, urlopen
from lxml import etree
import csv

ourl = "http://www.nseindia.com/live_market/dynaContent/live_watch/option_chain/optionKeys.jsp?segmentLink=17&instrument=OPTIDX&symbol=NIFTY&date=31DEC2015"

headers = {'Accept' : '*/*',
           'Accept-Language' : 'en-US,en;q=0.5',
           'Host': 'nseindia.com',
           'Referer': 'http://www.nseindia.com/live_market/dynaContent/live_market.htm',
           'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/35.0',
           'X-Requested-With': 'XMLHttpRequest'}

req = Request(ourl, None, headers)
response = urlopen(req)
the_page = response.read()

ptree = etree.HTML(the_page)
tr_nodes = ptree.xpath('//table[@id="octable"]/tr')
header = [i[0].text for i in tr_nodes[0].xpath("th")]
td_content = [[td.text for td in tr.xpath('td')] for tr in tr_nodes[1:]]

with open("nseoc.csv", "wb") as f:
    writer = csv.writer(f)
    writer.writerows(td_content)
由于异常字符串包含大量“\r”并以单个“\n”结尾,将数据写入csv时未对齐

首先,我将使用
lxml.html
包,获取每个单元格的
text\u content()
,然后应用
strip()

from lxml.html import fromstring   

ptree = fromstring(the_page)

tr_nodes = ptree.xpath('//table[@id="octable"]//tr')[1:]
td_content = [[td.text_content().strip() for td in tr.xpath('td')] 
              for tr in tr_nodes[1:]]
以下是
td\u内容的外观:

[
    ['', '700', '-', '-', '-', '5,179.00', '-', '1,350', '4,972.25', '5,006.15', '450', '2700.00', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', ''], 
    ['', '-', '-', '-', '-', '-', '-', '1,200', '4,710.85', '5,254.15', '150', '2800.00', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', ''],
    ...
]
请注意,“执行价格”在那里(2700和2800)