用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爬取w3shcool的JQuery课程并且保存到本地
Apr 06 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
实例介绍Python中整型
Feb 11 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
Sep 07 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 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的cms
2010/12/19 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
分享10段PHP常用代码
2015/11/11 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
PHP基于ORM方式操作MySQL数据库实例
2017/06/21 PHP
PHP正则判断一个变量是否为正整数的方法
2019/02/27 PHP
asp(javascript)全角半角转换代码 dbc2sbc
2009/08/06 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
jquery实现的仿天猫侧导航tab切换效果
2015/08/24 Javascript
前端JS面试中常见的算法问题总结
2016/12/23 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
实例详解Node.js 函数
2018/06/10 Javascript
学习React中ref的两个demo示例
2018/08/14 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
jQuery实现朋友圈查看图片
2020/09/11 jQuery
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
对numpy 数组和矩阵的乘法的进一步理解
2018/04/04 Python
django框架自定义用户表操作示例
2018/08/07 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
如何导出python安装的所有模块名称和版本号到文件中
2020/06/05 Python
Python通用唯一标识符uuid模块使用案例
2020/09/10 Python
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
母亲七十大寿答谢词
2014/01/18 职场文书
六查六看自查材料
2014/02/17 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
分享:关于学习的励志名言赏析
2019/08/16 职场文书
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android