用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中stdout输出不缓存的设置方法
May 29 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
Jul 02 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
Sep 25 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
Python实现手势识别
Oct 21 Python
安装python依赖包psycopg2来调用postgresql的操作
Jan 01 Python
Python字典和列表性能之间的比较
Jun 07 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/06/07 PHP
浅析linux下apache服务器的配置和管理
2013/08/10 PHP
Nginx实现反向代理
2017/09/20 Servers
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
javascript replace方法与正则表达式
2008/02/19 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
基于jQuery的星级评分插件
2011/08/12 Javascript
javascript使用for循环批量注册的事件不能正确获取索引值的解决方法
2014/12/20 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
Bootstrap每天必学之日期控制
2016/03/07 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
2017/07/13 Javascript
Angular实现响应式表单
2017/08/04 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
使用jquery的cookie实现登录页记住用户名和密码的方法
2019/03/13 jQuery
微信小程序利用云函数获取手机号码
2019/12/17 Javascript
jquery实现简易验证插件封装
2020/09/13 jQuery
Vue+Java+Base64实现条码解析的示例
2020/09/23 Javascript
[01:05]主宰至宝剑心之遗
2017/03/16 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
应届护士求职信范文
2014/01/26 职场文书
人力管理专业毕业生求职信
2014/02/27 职场文书
《云房子》教学反思
2014/04/20 职场文书
保险专业求职信
2014/07/07 职场文书
大四优秀党员个人民主评议
2014/09/19 职场文书
运动会报道稿大全
2015/07/23 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android