在标签中提取重复的文本和移动文本



我正在尝试爬网站(每日营业仪)以进行研究目的,我遇到了一个困难。

这是我在python中的代码:

obj.url = url
opener = urllib.request.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
response = opener.open(url)
soup = BeautifulSoup(response, 'html.parser')
article = soup.find("div", { "class" : "entry" })
paragraphs = article.findAll("p")
date = soup.find("time", style=False)
if not date:
   print("Date problem")
   obj.date = datetime.datetime.strptime('June 23, 1912', '%B %d, %Y').strftime("%Y-%m-%d")
else:
   obj.date = datetime.datetime.strptime(date.text.strip(), '%B %d, %Y').strftime("%Y-%m-%d")

困难是关于本文发布日期的。在某些文章中,有一个标签time,但在大多数旧文章中都没有这样的标签。因此,我试图直接从文本中检索日期,但可能会有所不同,有时文章的日期标题是这样:

<p>July 11, 2013<br/>
<strong>Daily Stormer</strong><br/>
Andrew Anglin</p>

<p>Andrew Anglin<br/>
<strong>Daily Stormer</strong><br/>
July 11, 2013</p>

<p>Andrew Anglin<br/>
<strong>July 11, 2013</strong><br/>
Daily Stormer</p>

有时日期甚至不在这里。您可以直接看到一些示例:

一种格式

另一种格式

如果不存在日期,我只能在每个示例中仅检索日期或什么都没有?

在您的示例中,我认为日期将始终以相同的格式出现: "July 11, 2013"

知道这一点,您可以将正则表达式与datetime模块相结合:

import re
import datetime
match = re.search(r'>([a-zA-Z].+ d.+)</', text)
date = datetime.strptime(match.group(), '%B %d, %Y').date()

编辑:
我很确定我使用的正则表达式可以简化,我让我找到更好的解决方案。

var str = '<p>July 11, 2013<br/><strong>Daily Stormer</strong><br/>Andrew Anglin</p>'; 
var matches = str.match(/>S{3,} d{2}, d{4}/);
var date = '';
if(matches)
{
    date = matches[0].substring(1);
}
console.log('Published date: ',date);

最新更新