用sleep间隔进行python反爬虫的实例讲解
作者:小妮浅浅 时间:2023-02-10 07:00:42
在找寻材料的时候,会看到一些暂时用不到但是内容不错的网页,就这样关闭未免浪费掉了,下次也不一定能再次搜索到。有些小伙伴会提出可以保存网页链接,但这种基本的做法并不能在网页打不开后还能看到内容。我们完全可以用爬虫获取这方面的数据,不过操作过程中会遇到一些阻拦,今天小编就教大家用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)解除网站对于爬虫的阻拦问题,着重标记了出来
来源:https://www.py.cn/jishu/jichu/21391.html
标签:sleep,python,反爬虫
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
一行两列背景自适应的简单写法 DIV+CSS
2008-07-15 12:51:00
Python偏函数实现原理及应用
2022-12-13 17:12:03
![](https://img.aspxhome.com/file/2023/8/82808_0s.png)
考虑SQL Server安全时所应注意的几个方面
2009-01-04 13:57:00
Python matplotlib底层原理解析
2021-05-11 07:05:29
![](https://img.aspxhome.com/file/2023/1/93631_0s.png)
Python二进制数据结构Struct的具体使用
2022-07-10 00:01:59
![](https://img.aspxhome.com/file/2023/5/77895_0s.png)
python Pandas如何对数据集随机抽样
2023-10-02 08:28:13
![](https://img.aspxhome.com/file/2023/9/95509_0s.png)
PHP封装CURL扩展类实例
2023-07-17 15:19:50
使用python3实现操作串口详解
2021-10-21 18:32:41
Pycharm虚拟环境pip时报错:no suchoption:--bulid-dir的解决办法
2023-02-15 20:56:11
![](https://img.aspxhome.com/file/2023/5/92405_0s.png)
JavaScript实现全选取消效果
2023-08-27 16:26:42
![](https://img.aspxhome.com/file/2023/7/56157_0s.png)
php+mysqli使用面向对象方式更新数据库实例
2023-06-23 00:30:23
SQLServer 2005中如何列所有存储过程
2008-11-24 17:39:00
网页中英文混排行高不等问题
2008-08-26 17:03:00
![](https://img.aspxhome.com/file/UploadPic/20088/26/200882617519588s.jpg)
centos下yum搭建安装linux+apache+mysql+php环境教程
2023-11-14 01:04:39
python买卖股票的最佳时机(基于贪心/蛮力算法)
2022-12-26 14:44:24
![](https://img.aspxhome.com/file/2023/1/76891_0s.png)
pytorch 实现打印模型的参数值
2022-11-11 22:22:28
![](https://img.aspxhome.com/file/2023/5/99555_0s.jpg)
python中 @的含义以及基本使用方法
2022-12-24 04:58:48
Python字典删除键值对和元素的四种方法(小结)
2021-06-12 22:58:24
浅谈python标准库--functools.partial
2023-01-03 20:08:36
![](https://img.aspxhome.com/file/2023/8/82608_0s.png)
python实现CTC以及案例讲解
2023-04-18 22:04:13
![](https://img.aspxhome.com/file/2023/6/92176_0s.png)