sjtuLib爬虫(一)

原创 2015年11月20日 21:40:17

前段时间想看一本《天才在左,疯子在右》的书,到图书馆网站一看,发现被预约了十次之多,只能说当时我就醉了。

后来一想,其实可以利用这一预约的数量来判断一本书的好坏与质量。这个社会,我们不缺书,而是缺少好书,往往会浪费时间在读一些不是那么好的书上。利用交大童鞋的集体智慧,挖掘一些好书,这是一个好法子!

之前对爬虫也只是了解,所以先弄一个简单些的吧。

我们现在python里面加入下面几个模块:

from bs4 import BeautifulSoup
import urllib
import urllib2
import pandas as pd
import numpy

从上往下的功能依次是:

解析标记语言

url应用模块

同上

数据帧(DataFrame)的模块,用于处理数据

同上,用于处理数据

其实后面另个模块不是必须的,只是为了练习一下python而已,而且,pandas和numpy的数据处理框架确实很好。

下面看几个函数吧~~

def urlData(url):
    request = urllib2.Request(url)
    context = urllib2.urlopen(request)
    context = urllib2.urlopen(request)
    context = context.read().decode('utf-8')
    return context

这段代码就是普通的,输入一个url,返回数据。这就是你在浏览器中输入一个网址,浏览器返回页面给你的过程,只不过,我们返回的是html文件而已。既然是html文件,所以我们要import bs4.这个模块里面有有一个美丽的泡泡,BeautifulSoup,还是非常好用的呢~

具体如何用呢,我们要结合网页,首先打开交大的图书馆主页,然后进入思源探索(吐槽一下,交大的图书馆也就主页好看了一些,不过国内高校似乎都这样)


选着好按照书号检索之后,上方的url(网址)http://ourex.lib.sjtu.edu.cn/primo_library/libweb/action/search.do?dscnt=0&dstmp=1448027587875&searchField=callnumber&fn=BrowseRedirect&vid=chinese&searchTxt=

这就是我们爬虫的初始页面。下面代码中,有一个prefix,这是应为,在html的代码中,下一页连接并不包含全部,所以我们在用beautifuSoup获取了下一页的连接之后,还要把前缀加上。至于BeautifuSoup的使用方法,网上有很多,童鞋们先去看一下吧。告诉大家一个体会,每次获取一个与soup有关的东西之后,就是type()一下,看看他是什么,这样你就知道这个对象有哪些方法啦。

下面这段代码中还用到了pandas来存储数据,使得数据好处理一些。pandas的DataFrame的教程百度经验都有哦~~

这个函数传入的是html代码,对其做处理之后,获取页面的书籍的书号、作者、和书籍详细情况的连接,并且获取指向下一页的url地址。最后,前面一部分一DataFrame的格式返回,后面的url连接,以字符串的形式返回。

简而言之,这个函数就是把我们人类不能理解的html(程序员不是人类)文件,提取出我们需要的信息。

def page2frame(context):
    prefix = 'http://ourex.lib.sjtu.edu.cn/primo_library/libweb/action/'
    soup = BeautifulSoup(context)
    soup = soup.body
    page = soup.find_all(class_='EXLResultsListBrowseLine')#get the valide record
    page.pop(0)#pop the first line,is useless
    
    dataEmpty = {'ID': [],'BookNamwe': [],'Writer':[],'Link':[]}
    frame = pd.DataFrame(dataEmpty)
    for cnt in range(0, len(page)):
        data = {'ID': [page[cnt].contents[6].string],\
                'BookNamwe': [page[cnt].contents[8].a.string],\
                'Writer':[page[cnt].contents[10].string],\
                'Link':[page[cnt].contents[8].a['href']]}
        temp = pd.DataFrame(data)
        frame = frame.append(temp)
    
    nLink = soup.find_all(class_='EXLNext EXLBriefResultsPaginationLinkNext')
    
    if nLink == []:    
        nextLink = []
    else:
        nLink = nLink[0];
        nextLink = prefix + nLink['href']
    return frame,nextLink
最后就是把上面两个函数有机结合起来。由于藏书实在是太多了,根本挖不完,所以,把爬下来的数据及时的存储到硬盘文件中。我运行了几十分钟就产生了几十兆的文件。拿来玩玩就好,整个图书目录爬下来,不是这么简单的架构可以实现的咯~~
def spiderForLib():
    f=file("E:/SpiderContent/content.txt","a+")
    #new_context="goodbye"
    
    context = urlData('http://ourex.lib.sjtu.edu.cn/primo_library/libweb/action/search.do?dscnt=0&dstmp=1447766424889&searchField=callnumber&fn=BrowseRedirect&vid=chinese&searchTxt=')
    frame,nextUrl = page2frame(context)
    pageNumber = 1
    print pageNumber
    while nextUrl != [] :
        context = urlData(nextUrl)
        frameTemp,nextUrl = page2frame(context)
        frame.append(frameTemp)
        new_context = str(pageNumber)+'\n'+frameTemp
        f.write(str(new_context))
        pageNumber += 1
        print pageNumber
        
    f.close()
    return frame
后期在这个基础上继续实现开头说的目标,最后让爬虫帮我找好书看~~技术改变生活,,但是,好书改变思维方式,改变命运。

    

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

sjtuLib爬虫-Scrapy

交大的图书馆网站做的真的不好,不好。但是还是要爬。没有做防墙机制,在爬取了15万条记录之后,IP又被图书馆墙了,而且貌似整个实验室都被wall了。。。。 上代码! from scrapy.spid...
  • qtlyx
  • qtlyx
  • 2016年05月13日 22:01
  • 434

sjtuLib爬虫(二)----sjtuLib爬虫之建立Scrapy框架

还是爬交大图书馆的数据,不过这次我们用Scrapy的开源爬虫框架。上次我们在Anaconda平台下安装了Scrapy,这回就可以开始用啦。 scrapy.cfg: 整个项目的配置文件 goodBook...
  • qtlyx
  • qtlyx
  • 2016年03月08日 15:18
  • 479

java 网络爬虫

  • 2017年11月23日 16:11
  • 1.04MB
  • 下载

YouTube视频爬虫简单抓取

YouTube是世界上最大的视频网站,早期公司总部位于加利福尼亚州的圣布鲁诺。在比萨店和日本餐馆,让用户下载、观看及分享影片或短片。公司于2005年2月15日注册,由华裔美籍华人陈士骏等人创立。200...

python爬虫爬取百度音乐歌单

  • 2017年11月17日 10:48
  • 3KB
  • 下载

《用python写网络爬虫》pdf

  • 2017年11月24日 14:57
  • 9.4MB
  • 下载

[爬虫]使用python抓取京东全站数据(商品,店铺,分类,评论)

一、环境 OS:win10 python:3.5 scrapy:1.3.2 pymongo:3.2 pycharm 环境搭建,自行百度二、数据库说明1. 产品分类京东大概有1183个分类,这是除去了一...

问卷星爬虫(带验证码)

  • 2017年11月17日 11:53
  • 6KB
  • 下载

用Python写网络爬虫

  • 2017年11月14日 17:37
  • 22.48MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sjtuLib爬虫(一)
举报原因:
原因补充:

(最多只允许输入30个字)