用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 pass 语句使用示例
Mar 11 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
Python制作Windows系统服务
Mar 25 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
用Python将一个列表分割成小列表的实例讲解
Jul 02 Python
Python小白必备的8个最常用的内置函数(推荐)
Apr 03 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
Python如何自动获取目标网站最新通知
Jun 18 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 21 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
法压式咖啡之制作法
2021/03/03 冲泡冲煮
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
discuz程序的PHP加密函数原理分析
2011/08/05 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
Laravel框架中缓存的使用方法分析
2019/09/06 PHP
Js组件的一些写法
2010/09/10 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
js 弹出新页面避免被浏览器、ad拦截的一种新方法
2014/04/30 Javascript
Javascript图片上传前的本地预览实例
2014/06/16 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
js实现鼠标感应图片展示的方法
2015/02/27 Javascript
关于javascript事件响应的基础语法总结(必看篇)
2016/12/26 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
简单谈谈React中的路由系统
2017/07/25 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
Python3安装Scrapy的方法步骤
2017/11/23 Python
python奇偶行分开存储实现代码
2018/03/19 Python
python实现简单登陆流程的方法
2018/04/22 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python的faker库用法
2019/11/28 Python
Python更换pip源方法过程解析
2020/05/19 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
python元组拆包实现方法
2021/02/28 Python
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
新年祝酒词大全
2015/08/11 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
python实现手机推送 代码也就10行左右
2022/04/12 Python