首页 > 编程知识 正文

金融信息网财经新闻,金融财经新闻头条

时间:2023-05-04 15:59:00 阅读:244804 作者:2202

大家一定还记得《金融数据的获取——一个爬虫的简单例子》这篇文章中介绍的爬虫思想和方法吧。看过之后,大多数人都会有这样的感受,虽然爬虫的原理比较简单,但是正则表达式却很难写。对于每个页面内容的爬取,首先需要要分析出HTML的大致结构,然后写一串很长很长的正则表达式,再需验证正则是否正确。

幸运的是,有人已经为我们造好了轮子,不必在爬取内容的定位上花较多时间。在Python中常用的爬虫工具有BeautifulSoup、lxml和pyquery,这些爬虫利器让我们脱离了繁琐的正则,仅需要几句简单的代码即可获得需要爬取的内容。BeautifulSoup:一个可以从HTML或XML文件中提取数据的Python库,并且支持一些第三方的解析器;

lxml:lxml采用的是XPath语法,XPath是一种专门对xml文档进行操作的语言;

pyquery:pyquery是python仿jquery的实现,与jquery的语法基本一致。

就笔者而言对jquery的语法比较熟悉,因此选择pyquery作为爬虫工具,大家可以根据自己的喜好来选择。

在这篇讲解中,我们会爬取中国证券网上的金融财经新闻。金融财经新闻是非结构化的文本数据,爬取这些文本是为了后续文本挖掘做准备的,关于金融文本挖掘相关的内容将会在后面文章中详细说明。

我们要爬取新闻初始页面是要闻 - 新闻 - 上海证券报·中国证券网。查看该页面的源码,可以发现在href属性中有跳转至各新闻正文的链接。

因此,第一步是要爬取这些新闻正文的URL。另外,新闻列表是可以翻页的,第二页页面链接是http://news.cnstock.com/news/sns_yw/2,根据URL的特点很容易对其进行字符串的拼接组装。

def get_urls(max_page):

start_url = 'http://news.cnstock.com/news/sns_yw/'

urls = []

for i in range(1,max_page+1):

spec_url = start_url + str(i) if i>1 else start_url + 'index.html'

source = pq(spec_url)

urls += [item.attr('href') for item in source('.new-list li a').items()]

return urls

上述代码中,通过source('.new-list li a').items()可以定位到html的元素,取各标签中的href属性即可获取各新闻正文的链接。可以看到,pyquery与jquery中的selector语法基本一致。max_page是可以控制的爬取最大页数,如果不想爬取所有的新闻可以将它设置xwdg点。

获取到每条新闻正文的链接后,根据该链接即可得到每条新闻对应的新闻标题、时间以及正文内容。打开正文页面的源代码,找到这些信息的所在位置。

采用pyquery定位并提取里面的html内容,并存放在字典中。

def get_news(url):

source = pq(url)

title = source('h1.title').text()

date = source('span.timer').text()

content = source('#qmt_content_div.content').text()

if content:

return {'URL': url, 'Title': title, 'Date': date, 'Content': content}

获取了我们想要的信息后,需要将其存到文本文件中,作为后续分析挖掘的原始数据。在这里,每条新闻都会使用一个txt文件去存储。

def save_txt(res):

reload(sys)

sys.setdefaultencoding('utf-8')

news_date = datetime.datetime.strptime(res['Date'],'%Y-%m-%d%H:%M:%S').strftime('%Y%m%d')

f_name = news_date + '_' + res['Title']

with codecs.open('securitynews/%s.txt'%f_name, 'w+', encoding='utf-8') as f:

f.write('来源网址:' + res['URL'] + 'n')

f.write('标题:' + res['Title'] + 'n')

f.write('日期:' + res['Date'] + 'n')

f.write('正文:' + res['Content'] + 'n')

大家可以看到,有了爬虫利器后我们再也不用写复杂的正则表达式了。对于静态网页的爬取,并没有什么技术上的难点,每位读者都可以去尝试获取自己想要的数据。

我的微信公众号:会掘金的小鹿(NuggetsRoad)

是时候关注一波了!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。