将2个BeautifulSoup查询组合成1个csv行

时间:2014-09-09 04:09:17

标签: python csv

基本上我正在尝试使用2个不同的BeautifulSoup查询并将它们显示在同一个CSV行上。 我是python的新手,所以如果您对我的代码有其他建议,请告诉我。

我能够用两种功能选择正确的数据但是我无法弄清楚如何将它们组合起来。

如果不是针对print_list()函数显示的4个空行,则print_list()函数和get_links()函数都将具有相同的行数。

我想要的是一张如下表格:     print_list()中的4列,然后是get_links()

中的1列

任何帮助都会很棒!

from bs4 import BeautifulSoup
import urllib2
import csv

links_list = []

url = 'http://www.sedar.com/DisplayCompanyDocuments.do?lang=EN&issuerNo=00010447'
sedar = urllib2.urlopen(url)
read_sedar = sedar.read()
soup = BeautifulSoup(read_sedar)

def print_list():
    with open('sedar.csv', 'wb') as outputfile:
        writer = csv.writer(outputfile)
        tds = soup.find_all('td')
        for tr in soup.find_all('tr'):
            tds = tr.find_all('td')
            row = [elem.text.encode('utf-8') for elem in tds[0:len(tds)-1]]
            writer.writerow(row)

def get_links():
    for form in soup.find_all('form'):
        links_list.append(form.get('action'))
    return links_list

1 个答案:

答案 0 :(得分:0)

一种方法是使用zip()来组合函数返回的列表中的相应元素。

def print_list():
    tds = soup.find_all('td')
    for tr in soup.find_all('tr'):
        tds = tr.find_all('td')
        row = [elem.text.encode('utf-8') for elem in tds[0:len(tds)-1]]
    return row

def get_links():
    for form in soup.find_all('form'):
        links_list.append(form.get('action'))
    return links_list

def write_to_output():
    first_four_cols = print_list()
    last_col = links_list()
    with open('sedar.csv', 'wb') as outputfile:
        csv_writer = csv.writer(outputfile)
        for row in zip(first_four_cols, last_col):
            csv_writer.write(row)

要解释zip()的工作原理,请考虑两个列表:

>>> a_list = ['one', 'two', 'three']
>>> b_list = ['four', 'five', 'six']
>>> for item in zip(a_list, b_list):
...     print item
...
('one', 'four')
('two', 'five')
('three', 'six')