编辑:
这是我的实际代码。我正在使用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()并且没有效果。所以我的问题是,一旦我有了我的抓取列表,我如何将每行数据转换为单独的字符串?
我很感激任何见解。
谢谢!
答案 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