用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 相关文章推荐
浅析AST抽象语法树及Python代码实现
Jun 06 Python
Python获取SQLite查询结果表列名的方法
Jun 21 Python
python用户评论标签匹配的解决方法
May 31 Python
Python pymongo模块常用操作分析
Sep 01 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python config文件的读写操作示例
Sep 27 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
使用Python发现隐藏的wifi
Mar 04 Python
pycharm 实现本地写代码,服务器运行的操作
Jun 08 Python
pytorch中的torch.nn.Conv2d()函数图文详解
Feb 28 Python
图神经网络GNN算法
May 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的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
关于hashchangebroker和statehashable的补充文档
2011/08/08 Javascript
Jquery网页出现的乱码问题的三种解决方法
2013/06/30 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
Javascript中toFixed计算错误(依赖银行家舍入法的缺陷)解决方法
2017/08/22 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
vue 实现通过手机发送短信验证码注册功能
2018/04/19 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
用js编写留言板
2020/03/17 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
vue实现防抖的实例代码
2021/01/11 Vue.js
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python中列表(list)操作方法汇总
2014/08/18 Python
Python抓取百度查询结果的方法
2015/07/08 Python
python实现rsa加密实例详解
2017/07/19 Python
使用k8s部署Django项目的方法步骤
2019/01/14 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
远东集团网络工程师面试题
2014/10/20 面试题
孩子教育的心得体会
2014/09/01 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
先进个人申报材料
2014/12/30 职场文书
欢迎词范文
2015/01/27 职场文书
2015医德医风个人工作总结
2015/04/02 职场文书
仙境之桥观后感
2015/06/16 职场文书
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript