数据被写三次而不是一次使用请求和openpyxl?

时间:2018-02-16 16:52:44

标签: python beautifulsoup python-requests

以下是我正在使用的代码:

from Sid.drivercommand import *
from Stocks.lot_size import symbol_list
from bs4 import BeautifulSoup
import datetime
from openpyxl import Workbook

p1_url = 'https://www.nseindia.com/marketinfo/companyTracker/mtOptionKeys.jsp?companySymbol='
p3_url = '&indexSymbol=NIFTY&series=EQ&instrument=OPTSTK&date=-'
symbol_list = ['ACC','SBIN','PNB']
loc = r"C:\Users\OneDrive\Stock Study"
loc_opt_data = r"C:\Users\OneDrive\Stock Study\Opt Data"
os.chdir(loc_opt_data)
date = 'Test_Data_'+ str(datetime.date.today()) + ".xlsx"
datewise_data = Workbook(date)
os.chdir(loc)
for symbol in symbol_list[0:1]:
    url = p1_url+symbol+p3_url
    raw_page = requests.get(url).text
    soup = BeautifulSoup(raw_page, "lxml")
    if len(raw_page) > 0:
        datewise_data_sheet = datewise_data.create_sheet(symbol)

         for table in soup.findAll('table'):
             '# Fields: ' + ','.join([tr.text for tr in table.findAll('th')])
             for row in table.findAll('tr'):
                # ws1.append(([tr.text for tr in row.findAll('td')]))
                datewise_data_sheet.append(([tr.text for tr in row.findAll('td')]))
                # test.append(([tr.text for tr in row.findAll('td')]))
             #print(symbol)
        raw_page = 0
datewise_data.save(date)

由此生成的文件包含数据,但每个符号有三组数据,而我只想要第一组/表。

1 个答案:

答案 0 :(得分:1)

你在网页的表格中有表格,所以你的代码在第一个表格中找到tr元素三次,在第二个表格中找到相同的tr元素和row.findAll (' td')第三次找到它们,因为第一个表td包含第二个表。 您只需要找到一次数据就可以使用:

table = soup.findAll('table')[1]
for row in table.findAll('tr'):

而不是:

for table in soup.findAll('table'):
    for row in table.findAll('tr'):

这将直接进入表格中的表格,并为您提供一组结果。