我使用beautifulsoup从以下网站上抓取内容:
from bs4 import BeautifulSoup
import requests
import re
dat = re.compile("Berlin, \d{2}. \w+\b \d{4}")
url = 'https://www.alternativefuer.de/gauland-scheinbares-umdenken-der-altparteien-ist-blanker-opportunismus/'
r = requests.get(url)
soup = BeautifulSoup(r.content, 'lxml')
data = soup.find('div',attrs={'id':'content','role':'main'})
text = data.findNext("div").text
然后我想提取字符串开头的日期。所以我试过了两个
date = data.findAll(text=re.compile("Berlin, \d{2}. \w+\b \d{4}"))
和
date = dat.match(text)
如果我将字符串复制到python正则表达式确实匹配日期。但是这两种选择似乎都不起作用。有人能指出我的问题所在吗?谢谢!
答案 0 :(得分:2)
假设您的网页抓取正确收集数据,您抓取的字符串看起来像"Berlin, 30. November 2016."
,所以......
>>> import re
>>> string = "Berlin, 30. November 2016."
>>> res = re.search("(\d+).+?(\w+).+?(\d+)", string)
>>> res.group(1)
'30'
>>> res.group(2)
'November'
>>> res.group(3)
'2016'
(
和)
将所需的字词/数字括起来,以便稍后抓取匹配组。或者你可以使用findall
,但因为你只想要一个匹配,所以这太过分了。res.group()
使用相同的模式即可获得整个匹配。答案 1 :(得分:2)
变化
dat = re.compile("Berlin, \d{2}. \w+\b \d{4}")
到
dat = re.compile("Berlin, \d{2}\. \w+ \d{4}")
转义正则表达式中的关键字.
,然后删除\b
,不需要使用它。
变化
date = dat.match(text)
到
date = dat.search(text)
text
以\nBerlin, 30. November 2016. Zum s....
开头,开头有一个新行,match
将从\n
开始,将其更改为search