大家一定还记得《金融数据的获取——一个爬虫的简单例子》这篇文章中介绍的爬虫思想和方法吧。看过之后,大多数人都会有这样的感受,虽然爬虫的原理比较简单,但是正则表达式却很难写。对于每个页面内容的爬取,首先需要要分析出HTML的大致结构,然后写一串很长很长的正则表达式,再需验证正则是否正确。
幸运的是,有人已经为我们造好了轮子,不必在爬取内容的定位上花较多时间。在Python中常用的爬虫工具有BeautifulSoup、lxml和pyquery,这些爬虫利器让我们脱离了繁琐的正则,仅需要几句简单的代码即可获得需要爬取的内容。
就笔者而言对jquery的语法比较熟悉,因此选择pyquery作为爬虫工具,大家可以根据自己的喜好来选择。
在这篇讲解中,我们会爬取中国证券网上的金融财经新闻。金融财经新闻是非结构化的文本数据,爬取这些文本是为了后续文本挖掘做准备的,关于金融文本挖掘相关的内容将会在后面文章中详细说明。
我们要爬取新闻初始页面是要闻 - 新闻 - 上海证券报·中国证券网。查看该页面的源码,可以发现在href属性中有跳转至各新闻正文的链接。
因此,第一步是要爬取这些新闻正文的URL。另外,新闻列表是可以翻页的,第二页页面链接是http://news.cnstock.com/news/sns_yw/2,根据URL的特点很容易对其进行字符串的拼接组装。
def get_urls(max_page):上述代码中,通过source('.new-list li a').items()可以定位到html的元素,取各标签中的href属性即可获取各新闻正文的链接。可以看到,pyquery与jquery中的selector语法基本一致。max_page是可以控制的爬取最大页数,如果不想爬取所有的新闻可以将它设置小一点。
获取到每条新闻正文的链接后,根据该链接即可得到每条新闻对应的新闻标题、时间以及正文内容。打开正文页面的源代码,找到这些信息的所在位置。
采用pyquery定位并提取里面的html内容,并存放在字典中。
def get_news(url):获取了我们想要的信息后,需要将其存到文本文件中,作为后续分析挖掘的原始数据。在这里,每条新闻都会使用一个txt文件去存储。
def save_txt(res):大家可以看到,有了爬虫利器后我们再也不用写复杂的正则表达式了。对于静态网页的爬取,并没有什么技术上的难点,每位读者都可以去尝试获取自己想要的数据。
我的微信公众号:会掘金的小鹿(NuggetsRoad)
是时候关注一波了!
上一篇:哪些大学金融专业比较好?