用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中for循环的使用
Apr 14 Python
Python中表示字符串的三种方法
Sep 06 Python
python实现将excel文件转化成CSV格式
Mar 22 Python
python opencv 读取本地视频文件 修改ffmpeg的方法
Jan 26 Python
对python中的控制条件、循环和跳出详解
Jun 24 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
浅谈Python 递归算法指归
Aug 22 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
Python实现打包成库供别的模块调用
Jul 13 Python
利用python对excel中一列的时间数据更改格式操作
Jul 14 Python
pycharm 如何查看某一函数源码的快捷键
May 12 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
mysql 搜索之简单应用
2007/04/27 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
jQuery Ajax请求状态管理器打包
2012/05/03 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
CSS中position属性之fixed实现div居中
2015/12/14 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
JavaScript数组去重的几种方法效率测试
2016/10/23 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
纯javascript实现选择框的全选与反选功能
2019/04/08 Javascript
何时/使用 Vue3 render 函数的教程详解
2020/07/25 Javascript
Python BeautifulSoup中文乱码问题的2种解决方法
2014/04/22 Python
Python实现快速排序和插入排序算法及自定义排序的示例
2016/02/16 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
浅谈python之新式类
2018/08/12 Python
利用Python对文件夹下图片数据进行批量改名的代码实例
2019/02/21 Python
Python 数据可视化pyecharts的使用详解
2019/06/26 Python
Python selenium的基本使用方法分析
2019/12/21 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
html5手机端页面可以向右滑动导致样式受影响的问题
2018/06/20 HTML / CSS
师范毕业生自我鉴定
2014/01/15 职场文书
教师个人自我评价范文
2014/04/13 职场文书
公司总经理岗位职责范本
2014/08/15 职场文书
返乡农民工证明
2015/06/24 职场文书
教你使用Pandas直接核算Excel中快递费用
2021/05/12 Python
MySQL 5.7常见数据类型
2021/07/15 MySQL
MIME类型中application/xml与text/xml的区别介绍
2022/01/18 HTML / CSS