用sleep间隔进行python反爬虫的实例讲解


Posted in Python onNovember 30, 2020

在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到。有些小伙伴会提出可以保存网页链接,但这种基本的做法并不能在网页打不开后还能看到内容。我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用sleep间隔进行python反爬虫,这样就可以得到我们想到的数据啦。

步骤

要利用headers拉动请求,模拟成浏览器去访问网站,跳过最简单的反爬虫机制。

获取网页内容,保存在一个字符串content中。

构造正则表达式,从content中匹配关键词pattern获取下载链接。需要注意的是,网页中的关键词出现了两遍(如下图),所以我们要利用set()函数清除重复元素。

第三步是遍历set之后的结果,下载链接。

设置time.sleep(t),无sleep间隔的话,网站认定这种行为是攻击,所以我们隔一段时间下载一个,反反爬虫。

具体代码

import urllib.request# url request
import re      # regular expression
import os      # dirs
import time
'''
url 下载网址
pattern 正则化的匹配关键词
Directory 下载目录
def BatchDownload(url,pattern,Directory):
   
  # 拉动请求,模拟成浏览器去访问网站->跳过反爬虫机制
  headers = {'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
  opener = urllib.request.build_opener()
  opener.addheaders = [headers]
  # 获取网页内容
  content = opener.open(url).read().decode('utf8')
  # 构造正则表达式,从content中匹配关键词pattern
  raw_hrefs = re.findall(pattern, content, 0)
  # set函数消除重复元素
  hset = set(raw_hrefs)
     
  # 下载链接
  for href in hset:
    # 之所以if else 是为了区别只有一个链接的特别情况
    if(len(hset)>1):
      link = url + href[0]
      filename = os.path.join(Directory, href[0])
      print("正在下载",filename)
      urllib.request.urlretrieve(link, filename)
      print("成功下载!")
    else:
      link = url +href
      filename = os.path.join(Directory, href)
       
    # 无sleep间隔,网站认定这种行为是攻击,反反爬虫
    time.sleep(1)
 
#BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/',
#       '(Storm-Data-Export-Format.docx)',
#       'E:\stormevents\csvfiles')
     
#       '(Storm-Data-Export-Format.pdf)',
#       '(StormEvents_details-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',
#       '(StormEvents_fatalities-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',
#       '(StormEvents_locations-ftp_v1.0_d(\d*)_c(\d*).csv.gz)',
#BatchDownload('https://www1.ncdc.noaa.gov/pub/data/swdi/stormevents/csvfiles/legacy/',
#       '(ugc_areas.csv)',
#       'E:\stormevents\csvfiles\legacy')

结果展示

为了让大家能够清楚的知道整个反爬过程,这里小编把思路和代码都罗列了出来。其中可以time.sleep(t)解除网站对于爬虫的阻拦问题,着重标记了出来

用sleep间隔进行python反爬虫的实例讲解

到此这篇关于用sleep间隔进行python反爬虫的实例讲解的文章就介绍到这了,更多相关如何使用sleep间隔进行python反爬虫内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python读写json文件的简单实现
Apr 11 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
Jun 06 Python
Python使用pandas处理CSV文件的实例讲解
Jun 22 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
python实现对图片进行旋转,放缩,裁剪的功能
Aug 07 Python
Java ExcutorService优雅关闭方式解析
May 30 Python
python为什么会环境变量设置不成功
Jun 23 Python
python批量处理多DNS多域名的nslookup解析实现
Jun 28 Python
浅谈Python里面None True False之间的区别
Jul 09 Python
教你利用python实现企业微信发送消息
May 23 Python
Django路由层如何获取正确的url
Jul 15 Python
Python基于Faker假数据构造库
Nov 30 #Python
python爬虫调度器用法及实例代码
Nov 30 #Python
python爬虫中url管理器去重操作实例
Nov 30 #Python
python爬虫中的url下载器用法详解
Nov 30 #Python
Python接口自动化测试框架运行原理及流程
Nov 30 #Python
Django数据模型中on_delete使用详解
Nov 30 #Python
Django数据统计功能count()的使用
Nov 30 #Python
You might like
显示程序执行时间php函数代码
2013/08/29 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
JS数组的遍历方式for循环与for...in
2014/07/31 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
Javascript基础知识盲点总结之函数
2016/05/15 Javascript
Vue.js 单页面多路由区域操作的实例详解
2017/07/17 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
详解vue组件基础
2018/05/04 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
[01:17:12]职来职往完美电竞专场
2014/09/18 DOTA
Python contextlib模块使用示例
2015/02/18 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
2018/03/29 Python
python实现list由于numpy array的转换
2018/04/04 Python
TensorFlow利用saver保存和提取参数的实例
2018/07/26 Python
简单分析python的类变量、实例变量
2019/08/23 Python
浅谈Python中的字符串
2020/06/10 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
营销总经理岗位职责
2014/02/02 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
农村文化建设标语
2014/10/07 职场文书
英文升职感谢信
2015/01/23 职场文书
研究生简历自我评
2015/03/11 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript