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网络爬虫获取电影天堂视频下载链接
[一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...
随机推荐
- I题 - A+B for Input-Output Practice (VIII)
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description You ...
- 怎么屏蔽F5键刷新功能
window.document.onkeydown=function(){if(event.keyCode==116){//屏蔽F5键,改为只刷新本页面,防止一刷就刷整个窗口event.keyCode ...
- iso 开发学习--简易音乐播放器(基于iPhone4s屏幕尺寸)
三个按钮 一个进度条 贴图(软件中部分图片,来自网络,如果侵犯了您的权益,请联系我,会立刻撤下) 核心代码 // // ViewController.m // 08-10-MusicPlayer / ...
- DB2中的系统表SYSIBM.SYSDUMMY1
ORACLE中有一张系统数据库表DUAL用来访问系统的相关信息 SELECT SYSDATE FROM DUAL; --返回当前系统日期 ------------------------------ ...
- 【HDOJ】3325 Arithmetically Challenged
简单DFS. /* 3325 */ #include <iostream> #include <set> #include <cstdio> #include &l ...
- 【HDOJ】3309 Roll The Cube
BFS,考虑一球进洞仅一球滚动以及两球重叠的情况即可. /* 3309 */ #include <iostream> #include <queue> #include < ...
- Qt入门(8)——事件和事件过滤器
在Qt里,一个事件是继承自QEvent的对象.事件通过调用QObject::event(),被发送到继承自 QObject 的对象.事件发送就是一个事件已经产生,由 QEvent正好去表达,且QObj ...
- 【图论】Codeforces 711D Directed Roads
题目链接: http://codeforces.com/problemset/problem/711/D 题目大意: 给一张N个点N条有向边的图,边可以逆向.问任意逆向若干条边使得这张图无环的方案数( ...
- Mac下Shell快捷键
ctrl+a //移到行首 ctrl+e //移到行尾 ctrl+y // 插入最近删除的单词或语句 ctrl+k //删除光标处到行尾部分 ctrl+u //删除光标处到行首部分 ctrl+w // ...
- Android吧数据保存成xml文件
public class MainActivity extends Activity { private List<Person> persons; @Override protected ...