如何在Python中将已删除的列表项转换为字符串?

时间:2015-04-07 12:36:03

标签: python

编辑:

这是我的实际代码。我正在使用BeautifulSoup来进行刮擦。完成scrape后,我使用bleach和cleanhtml函数从每个日期条目中删除HTML代码。

import mechanize
from bs4 import BeautifulSoup as BS
import urllib2
import bleach
import re
import datetime as dt

def cleanhtml(raw_html):

  cleanr =re.compile('<.*?>')

  cleantext = re.sub(cleanr,'', raw_html)

  return cleantext

br = mechanize.Browser()
br.set_handle_robots(False)
br.addheaders = [("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US;     rv:1.9.2.13) Gecko/20101206 Ubuntu/10.10 (maverick) Firefox/3.6.13")]

sign_in = br.open('https://www.mturk.com/mturk/beginsignin')

br.select_form(name="signIn")
br["email"] = 'xxxx'
br["password"] = 'xxxxx'
logged_in = br.submit()

mturk = br.open("https://www.mturk.com/mturk/status")

soup = BS(mturk.read())

date_column_values_raw = soup.findAll("td", "statusDateColumnValue")

date_column_values = bleach.clean(date_column_values_raw, strip=True)

date_column_values = cleanhtml(date_column_values)

我遇到了我创建的Python列表的问题。我抓了一页,我有一个如下所示的日期列表:

[
Apr 6, 2015
, 
Apr 5, 2015
, 
Apr 4, 2015
, 
Apr 3, 2015
]

我的目标是将这些日期转换为数据库友好格式,即2015-04-03

我的问题是,只要我尝试在for循环中迭代它们,循环就会分别处理每个字符而不是按行处理。

所以,当我这样做时:

for line in date_values:
   print line

我得到:      [

 A
 p
 r

 6
 ,

 2
 0
 1
 5
 ,
 ]

依此类推......这显然不是理想的结果。

我在for循环中尝试了/ n和5上的line.split()并且没有效果。所以我的问题是,一旦我有了我的抓取列表,我如何将每行数据转换为单独的字符串?

我很感激任何见解。

谢谢!

1 个答案:

答案 0 :(得分:2)

好像是你的date_values&#34;列表&#34;根本不是一个列表,而只是一个多行字符串。

date_values = """[
Apr 6, 2015
, 
Apr 5, 2015
, 
Apr 4, 2015
, 
Apr 3, 2015
]"""

您可以使用str.split()拆分该字符串,但不能在for循环中拆分 - 这样,您可以尝试拆分每个字符!相反,请尝试此列表理解。

date_list = [s.strip() for s in date_values[1:-1].split("\n,")]

在这里,[1:-1]摆脱了[],然后按换行符后跟逗号(或者单独赢得工作),最后strip离开和空白。

首先按行分割,然后取出所有在剥离空格后剩下多个字符的行:

date_list = [s for s in map(str.strip, date_values.splitlines()) if len(s) > 1]

现在,date_list['Apr 6, 2015', 'Apr 5, 2015', 'Apr 4, 2015', 'Apr 3, 2015']。然后你可以使用,例如strptime and strftime重新格式化日期,例如像这样:

import time
for date in date_list:
    d = time.strptime(date, "%b %d, %Y")
    date2 = time.strftime("%Y-%m-%d", d)
    print date, "-->", date2

输出:

Apr 6, 2015 --> 2015-04-06
Apr 5, 2015 --> 2015-04-05
Apr 4, 2015 --> 2015-04-04
Apr 3, 2015 --> 2015-04-03