为每次迭代BS4 python刮取数据并写入单行

时间:2013-11-14 13:47:16

标签: python web-scraping beautifulsoup

我有以下代码。这一切都在刮取数据。但我担心的是,每次迭代都会将数据写入一行。

这是我的代码

import bs4 as bs
import urllib2
import re

page = urllib2.urlopen("http://www.codissia.com/member/members-directory/?mode=paging&Keyword=&Type=&pg=1")
content = page.read()
soup = bs.BeautifulSoup(content)
eachbox = soup.find_all('div', {'class':re.compile(r'members_box[12]')})
for eachuniversity in eachbox:
    data =  [re.sub('\s+', '', text).strip().encode('utf8') for text in eachuniversity.find_all(text=True) if text.strip()]
    print(','.join(data))

更新

我希望输出像这样(单行)进行迭代

Name:,Mr.Srinivasan.N,Designation:,Proprietor,CODISSIA - Designation:,(Past President, CODISSIA),Name of the Industry:,Arian Soap Manufacturing Co,Specification:,LIFE,Date of Admission:,19.12.1969, "Parijaat" 26/1Shanker Mutt Road, Basavana Gudi,Phone:,2313861

但我得到如下

Name:,Mr.Srinivasan.N,Designation:,Proprietor,CODISSIA - Designation:,(Past President, CODISSIA),Name of the Industry:,Arian Soap Manufacturing Co,Specification:,LIFE,Date of Admission:,19.12.1969
"Parijaat" 26/1Shanker Mutt Road, Basavana Gudi,Phone:,2313861

1 个答案:

答案 0 :(得分:1)

eachbox可以是members_box1类,也可以是members_box2,因此迭代eachbox会在单独的一行上打印每个包装内容,而实际上您只需要在一行上。解决这个问题的一种方法是:

box1s = soup.find_all('div', class_='members_box1')
box2s = soup.find_all('div', class_='members_box2')
for box1, box2 in zip(box1s, box2s):
    data =  [re.sub('\s+', '', text).strip().encode('utf8') for text in box1.find_all(text=True) + box2.find_all(text=True) if text.strip()]
    print(','.join(data))