【问题标题】:Getting "Unknown String Error"出现“未知字符串错误”
【发布时间】:2016-03-31 19:38:27
【问题描述】:

我编写了一个函数,可以从网站上抓取多个邮政编码的数据。该代码适用于大多数邮政编码,但在某些地方我会遇到未知字符串错误。

这是我正在使用的代码

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 文档,但似乎没有一个“未知字符串错误”用例适合。

【问题讨论】:

  • 你能把posts[32]和posts[33]的值贴出来吗?
  • 刚刚发布在我的问题中
  • 所以我冒险猜测一下...dates_single() 在帖子[33] 中提到“四月”并试图将其转换为日期!如果将 fuzzy 设置为 False 会发生什么?
  • 另外,您可以手动将posts[33] 更改为不包含单词April 来测试它,看看是否能解决您的问题。
  • 哈哈,真是个好主意。将模糊设置为 false 会给我一个未知的错误。

标签: python web-scraping python-dateutil


【解决方案1】:

您的错误是由于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)

【讨论】:

  • 有道理。谢谢!
  • 澄清一下,并不是它模糊匹配 April 作为月份名称。 fuzzy 关键字只是指解析器将忽略字符串中不是日期的任何内容的事实。失败的原因是它找到了该月的 2 个值。 parse('April 28/2016') 将解析为 datetime(2016, 4, 28) 有或没有 fuzzy。
猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2018-07-04
  • 2012-05-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多