Python简易爬虫
经常需要下载论文,每次都需要去网页上搜索,然后点击下载,实在麻烦,正好最近刚入门Python,心血来潮,想着写一个爬虫
经过一天查阅资料,基本算是完成了,但是还是不足,比如对知网和万方暂时还不行,但是对于英文文献是基本上没有问题的,思路就是在百度学术上进行搜索,拿到它搜索结果的第一个页面,然后把里面的下载链接全部爬下来,循环,进行判断,只要下载成功,就退出。但是对于少部分的外国文献库,知网和万方,他们是的下载链接是需要拿到百度学术搜索连接后,在把这个页面下的下载链接爬下来,这一点写个递归最好了,时间有限,这个问题等过几天再进行补充。
下面直接上代码:
import urllib
import urllib.request
import re
import os #获得百度学术的第一个搜索结果
def baidusearch(key):
#百度中的用是gbk编码,像Google中则是utf8编码,因此这里
#需要先编码
key=urllib.request.quote(key.encode('gbk'))
url='''http://xueshu.baidu.com/s?wd={}'''.format(key)
response=urllib.request.urlopen(url)
str1=response.read().decode(encoding='utf8')
#匹配百度学术中的所有搜索结果
mat=re.compile(r'href="/s\?wd=paperuri\S+"')
str1=mat.findall(str1)
#取出第一个搜索结果
#将前后的href和引号去掉
str1=str1[0][6:-1]
#拼接为完整的路径
str1=r'http://xueshu.baidu.com'+str1
return str1 #获得搜索结果页面中的可用的下载链接
def getLink(key):
response=urllib.request.urlopen(baidusearch(key))
str1=response.read().decode(encoding='utf8')
#匹配真正的下载地址
mat=re.compile(r'<a class="dl_item" \S+ \S+"')
str1=mat.findall(str1)
#去掉地址的前后多余信息
if str1:
for i in range(len(str1)):
str1[i]=str1[i][41:-1]
#为了防止链接失效,这里返回所有可下载地址
return str1 #得到下载链接的响应报文头
def filesize(url):
request=urllib.request.Request(url)
response=urllib.request.urlopen(request)
return dict(response.info()) #下载文件
def dFile(key,path='d:\\'):
li=getLink(key)
if len(li):
for dowpath in li:
name=dowpath.split('/')[-1]
try:
if filesize(dowpath)['Content-Type']=='application/pdf':
print('将要从',dowpath,'下载')
#输出下载进度
def abk(a,b,c):
per=a*b/c*100.0
if per>100:
per=100
print('已完成:%.2f%%' %per)
#开始下载
print(name)
urllib.request.urlretrieve(dowpath,os.path.join(path,name),abk)
break
except:
continue def main():
while True:
key=input('请输入论文名,支持模糊搜索\n')
path=input('请输入下载路径,例如:c:\,默认为D盘根目录\n')
if len(path)==0:
path='D:\\'
print('开始下载\n')
dFile(key,path)
yn=input('下载完成,是否继续:y/n:')
if yn=='y':
continue
else:
break
#调试模块
if __name__=='__main__':
main()
这只是一个试验品。等过几天完善一下 在详细说明
Python简易爬虫的更多相关文章
- python简易爬虫来实现自动图片下载
菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...
- 爬虫系列1:python简易爬虫分析
决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例. 1.单个网页的简易爬虫 以下爬虫的主要功能是爬取百度贴吧中某一页面的所有图片.代码由主要有两个函数:其中getHtml()通过页面u ...
- python简易爬虫实现
目的:爬取昵称 目标网站:糗事百科 依赖的库文件:request.sys.beautifulSoup4.imp.io Python使用版本:3.4 说明:参考http://cn.python-requ ...
- Python简易爬虫爬取百度贴吧图片
通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...
- 【Python】Python简易爬虫爬取百度贴吧图片
通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...
- python简易爬虫,帮助理解re模块
20161203更新: 1.使用了BS4解析html 2.使用了mysql-connector插入了数据库表 pip install mysql-connector import urllib.req ...
- day17 python re模块 简易爬虫
day17 python 一.re模块 1.re模块的基础方法 查找findall() import re #re.findall(pattern,string,flags ...
- 利用简易爬虫完成一道基础CTF题
利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如 ...
- 一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接
[一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...
随机推荐
- 已安装好的tengine编译添加未被安装的模块
nginx -V 可以查看原来编译时都带了哪些参数 原来的参数: --prefix=/usr/local/tengine 需添加的参数: --with-http_stub_status_module ...
- 安卓SDK Manager自动管理各种包
安卓ADT不能自动从google下载sdk等各种工具 修改hosts文件下载成功 210.242.125.89 dl-ssl.google.com 210.242.125.89 dl.google ...
- linux主要目录的作用
手动敲一遍.算是加强记忆吧~ /:文件系统的入口,也是最高一级的目录 /bin:最基本的且着急用户和普通用户都可以使用的命令放在此目录下,如:ls.cp等 /boot:存放Linux的内核及引导系统所 ...
- 20141127 测试使用Word2013书写博客(代码高亮+公式支持)。
PS :又经过几次测试,发现用于Word2010的高亮插件在Word2013上排版效果不是很好,慎用.不过公式编辑倒是挺方便的 测试使用Word2013书写博客. 大概一个月前,使用WindowL ...
- BZOJ 2423 最长公共子序列
Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...
- Oracle开始从Java运行时中移除JAR包
早在2012年8月,在Java平台首席架构师Mark Reinhold宣布模块化项目Jigsaw之后不久,JEP 162这一题为“准备模块化”的提案就指出,在Jigsaw项目中为模块化系统开发的代码不 ...
- About JavaScript
JavaScript Function, Constructor function, Plain Object (expression function, closure) Maintainable ...
- iso 开发学习--简易音乐播放器(基于iPhone4s屏幕尺寸)
三个按钮 一个进度条 贴图(软件中部分图片,来自网络,如果侵犯了您的权益,请联系我,会立刻撤下) 核心代码 // // ViewController.m // 08-10-MusicPlayer / ...
- Linxu安装Lamp环境
安装MySQL数据库 sudo apt-get install mysql-server mysql-client 下图为提示输入数据库密码,然后回车,之后还有提示,再重复输入一次,再回车 最后安装完 ...
- [OpenGL]VS2010配置OpenGL开发环境
opengl概述 OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口. OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任 ...