Python 获取“未知字符串错误”

Python 获取“未知字符串错误”,python,web-scraping,python-dateutil,Python,Web Scraping,Python Dateutil,我编写了一个函数,可以从网站中获取多个邮政编码的数据。该代码适用于大多数邮政编码,但在某些情况下会出现未知字符串错误 这是我正在使用的代码 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 = 'h

我编写了一个函数,可以从网站中获取多个邮政编码的数据。该代码适用于大多数邮政编码,但在某些情况下会出现未知字符串错误

这是我正在使用的代码

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]
错误来自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文档,没有一个未知字符串错误用例看起来合适。

您的错误是由于检测为月份名称的4月和检测为月份编号的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)

你能发布帖子[32]和帖子[33]的值吗?我刚刚在我的问题中发布了它们,所以我冒昧地猜测一下……4月份的帖子[33]中出现了日期,并试图将其转换为日期!如果你将fuzzy设置为False会发生什么?另外,你可以通过手动更改帖子[33]来测试它,不包括April这个词,看看这是否解决了你的问题。哈哈,哇,这是个好主意。将fuzzy设置为false会给我一个未知的错误。谢谢作为澄清,这并不是说它模糊地匹配四月作为一个月的名称。fuzzy关键字只是指解析器将忽略字符串中任何非日期的内容。此操作失败的原因是它找到了该月的2个值。解析'April 28/2016'将解析到datetime2016,4,28,有无模糊。