由于到图书馆中查找数据的时候,每个网页都需要一张一张的翻转,而同时因为每张网页中的内容十分有限,故写此爬虫,方便查找之用

# -*- coding=utf-8 -*-
#@author: 、Edgar
#@version: 1.1
import requests
import urllib.error
from bs4 import BeautifulSoup
import time
import threadingdef get_html(url):"""获取网页的源代码"""header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/76.0.3809.100 Safari/537.36"}try:response = requests.get(url, headers=header)response.encoding = response.apparent_encodingexcept requests.HTTPError as e:print(e)except urllib.error.URLError as e:print(e)else:return response.textdef is_last_page(soup):"""判断该网页是不是最后一页了, 如果是的话,就返回False代表是最后一页否则的话返回下一页的网页地址"""target = soup.find('a', {"title": "Next"})if target is None:return Falseelse:return target["href"]def spider(soup):"""爬取是搜索后的网页,获得书名,余量等"""tr_list = soup.find("table", {"cellspacing": "1"}).findAll("tr", {"valign": "baseline"})total_data = ''for tr in tr_list:td_list = tr.findAll("td")num = td_list[0].get_text().replace(" ", '').strip()num = "序号: " + numcall_num = td_list[2].get_text().replace(" ", '').strip()call_num = "索书号: " + call_numname = td_list[3].get_text().replace("\n", '').strip()name = "书名: " + nameauthor = td_list[4].get_text().replace("\n", '').strip()author = "作者: " + authoryear = td_list[5].get_text().replace(" ", '').strip()year = "年代: " + yearinfo = td_list[6].get_text().replace(" ", '').strip()info = "馆名(总/借出): " + info# 获得链接,可从而获取更多的信息try:info_link = td_list[6].a["href"]except Exception :info_link = Nonesort = td_list[7].get_text().replace(" ", '').strip()sort = "类型: " + sortdata = num + '\n' + call_num + '\n' + name + '\n' + author + '\n' + year + '\n' + info + '\n' + sort + '\n'if info_link is None:spider_more_data = "无详细信息 \n"else:spider_more_data = spider_more(info_link)total_data = data + spider_more_datafile.write(total_data)file.write("-"*58+'\n')total_data = ''def spider_more(url):"""获得更多关于书籍"""html = get_html(url)soup = BeautifulSoup(html, "lxml")tr_list = soup.findAll("table", {"cellspacing": "2"})[1].find_all("tr")[1:]num = 0total_data =''for tr in tr_list:num += 1td = tr.findAll("td")status = td[2].get_text()status = "单册状态: " + statusreturn_time = td[3].get_text()return_time = "应还时间: " + return_timelocation = td[5].get_text()location = "馆藏位置: " + locationbar_code = td[8].get_text()bar_code = "条码: " + bar_codedata ="第{}本书具体信息:\n".format(num) + status + "\n" + return_time +  "\n" + location +  "\n" + bar_code + "\n\n"total_data += datareturn "\n" + total_datadef main(url):"""首先爬取第一页的信息,并且判断第一页是否是最后一页如果不是最后一页,在进行同样的操作"""html = get_html(url)soup = BeautifulSoup(html, 'lxml')spider(soup)flag = is_last_page(soup)while flag:url = flaghtml = get_html(url)soup = BeautifulSoup(html, 'lxml')spider(soup)flag = is_last_page(soup)time.sleep(6)class promote(threading.Thread):def run(self):print("正在下载数据中: ", end="")while 1:print(".", flush=True,end="")time.sleep(2)if __name__ == "__main__":file = open("lib_data.txt", "a", encoding="utf-8")url = input("请输入您在交大图书馆搜索后的网页链接(复制粘贴即可): ")pro = promote()pro.setDaemon(True)pro.start()start_time = time.time()main(url)end_time = time.time()print("\n共用时 {} s".format(end_time-start_time))

程序执行之后直接生成 txt 文件,可直接查看

附:
交大图书馆官网:http://www.lib.sjtu.edu.cn/f/main/index.shtml

今日发现交大图书馆在首页搜索之后样式不是之前的样式了,推荐搜索的时候在
http://opac.lib.sjtu.edu.cn 搜不会出现其他问题1


  1. 2019年9月22日 ↩︎

用python爬取交大图书馆图书信息相关推荐

  1. 爬取郑州大学图书馆图书信息

    图书馆链接 要在校园网情况下运行.否则没有权限 import requests import re headers={"User-Agent":"Mozilla/5.0 ...

  2. Python按照你的检索爬取天津大学图书馆书籍信息

    Python按照你的检索爬取天津大学图书馆书籍信息 爬取步骤 网页解析 代码 完全自己手写的代码,入门级水平把.对于静态HTML网页爬取来说相对简单,现在对于动态编写JavaScript还不知道如何处 ...

  3. Python爬虫入门 | 4 爬取豆瓣TOP250图书信息

      先来看看页面长啥样的:https://book.douban.com/top250   我们将要爬取哪些信息:书名.链接.评分.一句话评价--   1. 爬取单个信息 我们先来尝试爬取书名,利用之 ...

  4. python 爬虫 爬取当当网图书信息

    初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...

  5. scrapy框架的简单使用——爬取当当网图书信息

    ** Scrapy爬取当当网图书信息实例 --以警察局办案为类比 ** 使用Scrapy进行信息爬取的过程看起来十分的复杂,但是他的操作方式与警局办案十分的相似,那么接下来我们就以故事的形式开始Scr ...

  6. 爬取起点网站图书信息(书名、作者、简介、图片url)

    # 爬取qidian网站图书信息(书名.作者.简介.图片url) import requests from lxml import etree import jsonclass BookSpider( ...

  7. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  8. Python爬取安居客经纪人信息

    Python爬取安居客经纪人信息 Python2.7.15 今天我们来爬取安居客经纪人的信息.这次我们不再使用正则,我们使用beautifulsoup.不了解的可以先看一下这个文档,便于理解.http ...

  9. Python爬取药监局化妆品管理信息发现的问题

    Python爬取药监局化妆品管理信息 **1.json格式本质上是字符串!!! 今天在爬取国家药监局化妆品管理信息的时候,发现"json数据本质上是字符串",以前我还以为json本 ...

最新文章

  1. PHP7 学习笔记(七)如何使用zephir编译一个扩展记录
  2. SpringBoot中使用 Druid 数据库连接池, 后台SQL监控无效
  3. 【问链财经-区块链基础知识系列】 第二十八课 区块链如何助力万亿规模的供应链金融蛋糕
  4. 查找三 哈希表的查找
  5. Spring Cloud Sidecar –节点初始化
  6. 栈应用_检测成对符号是否正确使用(代码、分析、汇编)
  7. 10行代码实现小程序支付功能!丨实战
  8. 基于 Android 6.0 的 小米 MIUI 8 已开源
  9. Atitit 提升开发效率法 fx t35 Atitit 提升开发效率法---开发方法架构简化法.docx 目录 1. 主要几个层次上简化开发 1 1.1. ,开发体系方法使用简单方法 1 1.2.
  10. task文件服务器无法反弹,手把手带你玩转NAS 篇二十一:小米Redmi AC2100路由器刷机padavan保姆级教程...
  11. dcs world f15c教学_【温故知新】DCS如何操作?看这篇就全懂了!
  12. 桌面时间的最佳管理者-软媒时间
  13. python md5加密字符串_Python使用MD5加密字符串示例
  14. 将数字转为ASCII码
  15. android 跳应用市场评分,Android 应用中跳转到应用市场评分示例
  16. 转】用Hadoop构建电影推荐系统
  17. Unity 2D Pixel Perfect 2018新功能文档 自制中文翻译
  18. 微信动态表情保存到手机相册
  19. 百度的专业检索方法(我们所不知道的搜索语法)
  20. 计算机专业留学法国哪个学校,法国留学读计算机专业去哪些学校?

热门文章

  1. MacOS 安装 MySQL
  2. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系
  3. mysql sql 不能为空_SQL为空和=空
  4. c 语言 控制台程序 行字体颜色,C# 控制台程序设置字体颜色
  5. opencvsharp图像处理_腐蚀与膨胀,击中击不中变换(3)
  6. iOS OC利用imageview属性切出类似圆柱图形
  7. 实现个人域名跳转指定网站
  8. python之列表方法大全
  9. 休假模块_如何为(几乎)任何电子邮件帐户创建休假消息
  10. 手把手教你搭建一个【文件共享平台】系列教程第一话——你想知道的,这里都有