爬遍全网

反爬虫与反反爬虫

2021-10-05  本文已影响0人  可爱多多少

1.反爬虫技术

首先我们来思考一下,为什么要反爬虫?

基于以上原因,反爬虫技术孕育而生,主要包含以下最常用的反爬技术:

2.反反爬虫技术

有反爬虫技术,就会有反反爬虫技术存在,这是两种相互对抗的技术;这两种技术也在相互对抗中不断发展。

我们在编写爬虫时,要对获取海量的免费数据心怀感恩,而不是恶意攻击网站,这是一种害人害己的形为。

常用的反反爬虫技术有以下这些:


DWONLOAD_DELAY = 4

或设置RANDOMIZE_DOWNLOAD_DELAY,定义一个随机的请求延迟时间。

RANDOMIZE_DOWNLOAD_DELAY = True


#Disable cookies (enabled by default)
COOKIES_ENABLED = False

1.设定浏览器列表。
将浏览器列表定义至settings.py文件中:

MY_USER_AGENT = ["Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NETCLR 1.1.4322; .NET CLR 2.0.50727)", \
                 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser;SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)", \
                 "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; WindowsNT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", 
                 ]

2.在中间件UserAgentMiddleware中从浏览器列表中随机获取一个浏览器。

#导入UserAgentMiddleware组件模块

from scrapy.downloadermiddlewares.useragent import UserAgentMiddleware
import random                                               #导入随机模块

from qidian_hot.settings import MY_USER_AGENT       #导入浏览器列表

#定义类QidianHotUserAgentMiddleware,用于设置随机设置user-agent
#继承于UserAgentMiddleware

class QidianHotUserAgentMiddleware(UserAgentMiddleware):
    #处理Request请求函数

    def process_request(self, request, spider):
      #使用random模块的choice函数从列表MY_USER_AGENT中随机获取一个浏览器类型

      agent = random.choice(list(MY_USER_AGENT))
      print("user-agent:", agent)                     

      #将User-Agent附加到Reqeust对象的headers中

      request.headers.setdefault('User-Agent', agent)

3.启用中间件UserAgentMiddleware。

# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
  'qidian_hot.middlewares.QidianHotDownloaderMiddleware': None,
  'qidian_hot.middlewares.QidianHotUserAgentMiddleware': 100,
}


参考文献

盘点一些网站的反爬虫机制
功能强大的python包(八):Scrapy (网络爬虫框架)

上一篇下一篇

猜你喜欢

热点阅读