关闭

sjtuLib爬虫(一)

标签: pythonhtmlurl爬虫
465人阅读 评论(0) 收藏 举报
分类:

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

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

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

我们现在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
后期在这个基础上继续实现开头说的目标,最后让爬虫帮我找好书看~~技术改变生活,,但是,好书改变思维方式,改变命运。

    

0
0
查看评论

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

还是爬交大图书馆的数据,不过这次我们用Scrapy的开源爬虫框架。上次我们在Anaconda平台下安装了Scrapy,这回就可以开始用啦。 scrapy.cfg: 整个项目的配置文件 goodBook/: 项目各个模块,代码就主要在这里了 goodBook/items.py: 话说爬虫爬下来的东西总...
  • qtlyx
  • qtlyx
  • 2016-03-08 15:18
  • 685

sjtuLib爬虫-Scrapy

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

Python爬虫一(入门综述、基础)

转载:静觅 » Python爬虫入门一之综述 首先爬虫是什么? 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 根据我的经验,要学习Python爬虫,我们...
  • freeking101
  • freeking101
  • 2017-03-01 21:27
  • 574

干货|一个简单粗暴的爬虫 - 必应今日美图

“全球人工智能”拥有十多万AI产业用户,10000多名AI技术专家。主要来自:北大,清华,中科院,麻省理工,卡内基梅隆,斯坦福,哈佛,牛津,剑桥...以及谷歌,腾讯,百度,脸谱,微软,阿里,海康威视,英伟达......等全球名校和名企。 ——免费加入AI高管投资者群>> ...
  • CygqjBABx875u
  • CygqjBABx875u
  • 2017-10-09 00:00
  • 157

零基础自学用Python 3开发网络爬虫(四): 登录

点击进入本系列目录 今天的工作很有意思, 我们用 Python 来登录网站, 用Cookies记录登录信息, 然后就可以抓取登录之后才能看到的信息. 今天我们拿知乎网来做示范. 为什么是知乎? 这个很难解释, 但是肯定的是知乎这么大这么成功的网站完全不用我来帮他打广告. 知乎网的登录比较简单, 传...
  • IAlexanderI
  • IAlexanderI
  • 2017-03-28 14:45
  • 450

爬虫爬虫爬虫(一)

准备工作 关于scrapy准备工作运行了一下示例 的源码,卡住了!!!关于scrapy光是起步就已经撞得满头包了〒▽〒 本来看着教程,开开心心的做第一步,先建个工程 scrapy不是一个可以执行的命令或者程序… 诶? 上网搜一下,哦,可能是scrapy的环境没有配置好,这个简单,改一改就好了...
  • Misaka_S
  • Misaka_S
  • 2017-07-18 21:58
  • 282

一起学爬虫 Node.js 爬虫篇(二)

版权声明:本文为 wintersmilesb101 -(个人独立博客– http://wintersmilesb101.online 欢迎访问)博主原创文章,未经博主允许不得转载。 上一篇中我们对百度首页进行了标题的爬取,本来打算这次直接对上次没有爬取到的推荐新闻进行爬取,谁知道网页加载出来没网页了...
  • qq_21265915
  • qq_21265915
  • 2017-03-23 22:31
  • 1708

Python爬虫进阶一之爬虫框架概述

爬虫入门之后,我们有两条路可以走。
  • qq_37267015
  • qq_37267015
  • 2017-03-20 10:06
  • 1152

HtmlAgilityPack.dll爬虫获取百度音乐批量下载地址(C#源码)

关于分析的过程和思路参考原来的一篇文章 《HtmlAgilityPack 爬虫批量获取百度音乐下载地址一》        http://blog.csdn.net/witch_soya/article/details/8316194   ...
  • Witch_Soya
  • Witch_Soya
  • 2013-01-10 09:27
  • 4371

跟我学系列,走进Scrapy爬虫(五)聊一聊Items

本章工作任务 任务1:为什么要使用Item? 任务2:如何使用Item? 任务3:Item的扩展 本章技能目标及重难点 编号 技能点描述 级别 1 为什么要使用Item? ★ 2 如何使用Item? ★★★ 3 Item的扩展 ★★ 注: "★"理解级别 "★★&quo...
  • fanfzj
  • fanfzj
  • 2017-03-18 19:36
  • 153
    个人资料
    • 访问:328402次
    • 积分:4640
    • 等级:
    • 排名:第7545名
    • 原创:161篇
    • 转载:31篇
    • 译文:0篇
    • 评论:191条
    欢迎

    个人微信号:luxiaoran0178

    量化知乎专栏:https://zhuanlan.zhihu.com/lyx-quant

    个人邮箱:qtluyixiao@163.com

    个人运营公众号:请搜索:tebs

    博客专栏
    最新评论