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网络爬虫获取电影天堂视频下载链接
[一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...
随机推荐
- C++函数重载遇到了函数默认参数情况
一.C++中的函数重载 什么是函数重载? 我的理解是: (1)用一个函数名定义不同的函数: (2)函数名和不同参数搭配时函数会有不同的含义: 举例说明: #include <stdio.h> ...
- Cordova VS React Native 谁是未来? - b
对于原生native还是倍加推崇的,极佳的用户体验和性能让我学的如痴如醉,可是互联网这个世界可以用一句话可以总结:没有什么是不可能的.自从阿里淘宝天猫横空出世,它们教会了人们如何在网上购物,然后仿佛一 ...
- gcc将多个静态库链接成一个静态库
参考:https://sourceware.org/binutils/docs/binutils/ar-scripts.html#ar-scripts makefile如下: ARSCRIPT=scr ...
- jquery的笔记
1. 基本选择器 基本的 #id .class element(元素) *(全部元素) $("#id") $(".class") ...
- A Statistical View of Deep Learning (IV): Recurrent Nets and Dynamical Systems
A Statistical View of Deep Learning (IV): Recurrent Nets and Dynamical Systems Recurrent neural netw ...
- HYPER-V2008里安装WINDOWS 2012,以及监控宝
呵呵,这两者有关系么?没关系.哈哈. 为了方便就放一起了. 至少,2008里的HYPERV能安装2012,倒是给我很多欣慰.
- java 实现多种排序
public class Sort { //交换两个数 private void swap(int[] arr, int i,int j){ int temp = a ...
- 【模拟】BAPC2014 G Growling Gears (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【模拟】Codeforces 710C Magic Odd Square
题目链接: http://codeforces.com/problemset/problem/710/C 题目大意: 构造一个N*N的幻方.任意可行解. 幻方就是每一行,每一列,两条对角线的和都相等. ...
- Contains Duplicate III —— LeetCode
Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...