使用正则表达式从文章中获取信息

时间:2014-02-27 22:17:49

标签: python regex web-scraping

我正在使用正则表达式和美丽的汤来从文章中获取信息。我目前似乎无法从输出中得到我需要的东西。对于日期,我只需要获取列表中返回的第一个实例。我试过迭代列表,但还没有多少运气。对于作者,我想删除一个href标签,只是得到它的人而不是整个返回的字符串。我尝试了一个循环并更改了一些正则表达式调用,但无法缩小范围。任何指导将不胜感激。以下是相关代码:

import urllib2
from bs4 import BeautifulSoup
import re
from time import *

url: http://www.reuters.com/article/2014/02/26/us-afghanistan-usa-militants-idUSBREA1O1SV20140226

# Parse HTML of article, aka making soup
soup = BeautifulSoup(urllib2.urlopen(url).read())

# Write the article author to the file    
regex = '<p class="byline">(.+?)</p>'
pattern = re.compile(regex)
byline = re.findall(pattern,str(soup))
txt.write("Author: " + str(byline) + '\n' + '\n')

# Write the article date to the file    
regex = '<span class="timestamp">(.+?)</span>'
pattern = re.compile(regex)
byline = re.findall(pattern,str(soup))
txt.write("Date: " + str(byline) + '\n' + '\n')

1 个答案:

答案 0 :(得分:0)

您可以使用BeautifulSoup使用您描述的几乎相同的方法准确抓取您所需的内容,而不使用正则表达式。由于您了解自己感兴趣的代码的特征,因此可以使用bs4 find

直接搜索它们
#make some soup
soup = BeautifulSoup(urllib2.urlopen(url).read())

#extract byline and date text from their respective tags
try:
    byline=soup.find("p", {'class':'byline'}).text
    date=soup.find("span", {'class':'timestamp'}).text
except:
    print 'byline missing!'

<强>已更新: 如果你将整个事物包裹在try/except结构中,你可以解决缺少副行的情况并定义一些应该发生的替代动作。