获取 "Unknown String Error"
Getting "Unknown String Error"
我编写了一个函数,可以从网站上抓取多个邮政编码的数据。该代码适用于大多数邮政编码,但在某些地方我会收到未知字符串错误。
这是我正在使用的代码
import time
from datetime import date, timedelta
from bs4 import BeautifulSoup
import urllib2
from dateutil.parser import parse
import pandas as pd
import random
import os
url = 'https://www.sittercity.com/jobs/search?distance=50&&page=1&per_page=100000&search_strategy=babbysitting_job&&selected_facets%5Bnew_jobs%5D=true&sort=relevance&zipcode=94513'
soup = BeautifulSoup(urllib2.urlopen(url))
posts = [t.text for t in soup.find_all(class_ = "item posted-by")]
dates = [parse(item, fuzzy = True) for item in posts]
错误来自帖子列表中的第 34 项。但是列表中每个元素的数据类型是相同的,所以我很困惑。列表中的第 33 项似乎也有效。例如:
这个有效:
dates_single = parse(posts[32], fuzzy = True)
但这不是 (?)
dates_single = parse(posts[33], fuzzy = True)
这是 posts[32] 和 posts[33] 的值
>>> posts[33]
u'Posted by April A. on 3/28/2016'
>>> posts[32]
u'Posted by Chandrika M. on 3/30/2016'
我通读了 datetil.parser 文档并且 "Unknown String Error" 用例的 none 似乎适合。
您的错误是由于 April
(检测为月份名称)和 3
检测为月份编号之间的冲突。
最小示例:
from dateutil.parser import parse
parse(u'Posted by Chandrika M. on 3/30/2016', fuzzy=True) # datetime.datetime(2016, 3, 30, 0, 0)
parse(u'Posted by April A. on 3/28/2016', fuzzy=True) # ValueError: Unknown string format
parse(u'Posted by XYZ A. on 3/28/2016') # datetime.datetime(2016, 3, 28, 0, 0)
由于您的格式定义明确,您可以简单地执行直接转换,而无需任何启发式方法。
s = u'Posted by April A. on 3/28/2016'
datetime.datetime.strptime(s.split()[-1], "%m/%d/%Y") # datetime.datetime(2016, 3, 28, 0, 0)
我编写了一个函数,可以从网站上抓取多个邮政编码的数据。该代码适用于大多数邮政编码,但在某些地方我会收到未知字符串错误。
这是我正在使用的代码
import time
from datetime import date, timedelta
from bs4 import BeautifulSoup
import urllib2
from dateutil.parser import parse
import pandas as pd
import random
import os
url = 'https://www.sittercity.com/jobs/search?distance=50&&page=1&per_page=100000&search_strategy=babbysitting_job&&selected_facets%5Bnew_jobs%5D=true&sort=relevance&zipcode=94513'
soup = BeautifulSoup(urllib2.urlopen(url))
posts = [t.text for t in soup.find_all(class_ = "item posted-by")]
dates = [parse(item, fuzzy = True) for item in posts]
错误来自帖子列表中的第 34 项。但是列表中每个元素的数据类型是相同的,所以我很困惑。列表中的第 33 项似乎也有效。例如:
这个有效:
dates_single = parse(posts[32], fuzzy = True)
但这不是 (?)
dates_single = parse(posts[33], fuzzy = True)
这是 posts[32] 和 posts[33] 的值
>>> posts[33]
u'Posted by April A. on 3/28/2016'
>>> posts[32]
u'Posted by Chandrika M. on 3/30/2016'
我通读了 datetil.parser 文档并且 "Unknown String Error" 用例的 none 似乎适合。
您的错误是由于 April
(检测为月份名称)和 3
检测为月份编号之间的冲突。
最小示例:
from dateutil.parser import parse
parse(u'Posted by Chandrika M. on 3/30/2016', fuzzy=True) # datetime.datetime(2016, 3, 30, 0, 0)
parse(u'Posted by April A. on 3/28/2016', fuzzy=True) # ValueError: Unknown string format
parse(u'Posted by XYZ A. on 3/28/2016') # datetime.datetime(2016, 3, 28, 0, 0)
由于您的格式定义明确,您可以简单地执行直接转换,而无需任何启发式方法。
s = u'Posted by April A. on 3/28/2016'
datetime.datetime.strptime(s.split()[-1], "%m/%d/%Y") # datetime.datetime(2016, 3, 28, 0, 0)