用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海龟绘图实例教程
Jul 24 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
Python采用Django开发自己的博客系统
Sep 29 Python
python实现发送邮件及附件功能
Mar 02 Python
windows 下python+numpy安装实用教程
Dec 23 Python
Python2.7+pytesser实现简单验证码的识别方法
Dec 29 Python
Sanic框架路由用法实例分析
Jul 16 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
Ubuntu18.04下python版本完美切换的解决方法
Jun 14 Python
python实现的Iou与Giou代码
Jan 18 Python
使用pyplot.matshow()函数添加绘图标题
Jun 16 Python
据Python爬虫不靠谱预测可知今年双十一销售额将超过6000亿元
Nov 11 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也可以?成Shell Script
2006/10/09 PHP
PHP技术开发技巧分享
2010/03/23 PHP
Yii中创建自己的Widget实例
2016/01/05 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
ThinkPHP框架整合微信支付之刷卡模式图文详解
2019/04/10 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
JQuery的Validation插件中Remote验证的中文问题
2010/07/26 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
node.js获取参数的常用方法(总结)
2017/05/29 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
2019/08/31 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
百日安全活动总结
2014/05/04 职场文书
领导个人查摆剖析材料
2014/10/29 职场文书
廉政承诺书
2015/01/19 职场文书
2015年护士节活动总结
2015/02/10 职场文书
英雄儿女观后感
2015/06/09 职场文书
《风娃娃》教学反思
2016/02/18 职场文书