发表于 2019-7-17 09:11

申请会员ID:TanTan【冒充他人作品申请】


1、申 请 I D:TanTan
2、个人邮箱:381133438@qq.com
3、原创技术文章:本人是Python爱好者,擅长写爬虫和web开发,希望在此和各位大牛交流学习

---> 关于爬虫,分享一个Discuz反爬虫的经历
Discuz的反爬虫基本有三个阶段:



[*]第一个阶段,cookies反爬虫:
当访问一个discuz论坛频次超过一定次数之后,就会通过js写cookies的方式,js验证cookies,如果通过则可以继续访问,这个阶段很容易通过,只要通过正则匹配找到写入的cookies内容,然后传入session,即可。
以hostloc为例:
html内容为:

纯文本查看 复制代码
?
123456789<html><body>    </script><noscript><h1 style="text-align:center;color:red;"><strong>Please turn JavaScript on and reload the page.</strong></h1></noscript>    <script>      document.cookie = "L7FW=2b5b96b9100d06a0850dcf1a8d9c14cb; path=/";      location.href = "https://www.hostloc.com/?d=1";    </script></body></html>

通过Python处理:

纯文本查看 复制代码
?
0102030405060708091011121314151617181920import requestsimport re url='https://www.hostloc.com'session=requests.Session()r=session.get(url) if len(re.findall('document.cookie=".*?";',r.text))>0:    rcookies=re.findall('document.cookie="(.*?)";',r.text)    cookies={}    for kv in rcookies.split(';'):      k,v=kv.strip().split('=',1)      cookies=v      session.cookies.set(**cookies)if len(re.findall('location.href="(.*?)";',r.text))>0:    redirect_url=re.findall('location.href="(.*?)";',r.text)    if not redirect_url.startswith('https://'):      redirect_url=home+redirect_url    r=session.get(redirect_url)print(r.text)

[*]第二个阶段:js反爬虫阶段
超过了第一个阶段,再次触达反爬虫机制,第二阶段其实也是cookies验证,但是就不是直接告诉你cookies内容了,而是通过js计算得来的cookies
HTML内容为:

纯文本查看 复制代码
?
010203040506070809101112131415161718<html> <body>    <script type="text/javascript" src="/aes.min.js"></script><noscript><h1 style="text-align:center;color:red;"><strong>Please turn JavaScript on and reload the page.</strong></h1></noscript>    <script>    function toNumbers(d) { var e = [];      d.replace(/(..)/g, function(d) { e.push(parseInt(d, 16)) }); return e }   function toHex() { for (var d = [], d = 1 == arguments.length && arguments.constructor == Array ? arguments : arguments, e = "", f = 0; f < d.length; f++) e += (16 > d ? "0" : "") + d.toString(16); return e.toLowerCase() }    var a = toNumbers("2b5b96b9100d06a0850dcf1a8d9c14cb"),      b = toNumbers("ce4873ff28d9d18d8d4f31e94470db34"),      c = toNumbers("158b191e59dc44701bac485da7b29143");    document.cookie = "L7FW=" + toHex(slowAES.decrypt(c, 2, a, b)) + ";path=/";    location.href = "https://www.hostloc.com/?d=1";    </script></body> </html>

这个时候有两种选择:①用python重写计算过程。但是discuz的计算算法可能有好几套,因为每次刷新计算的方式都不一样,这种方式纯粹吃力不讨好。②调用selenium访问网页,获取到cookies,然后返回给requests用,这里用到的是第二种,比较方便快捷
Python代码:

纯文本查看 复制代码
?
01020304050607080910111213141516171819import requestsimport refrom selenium import webdriver url='https://www.hostloc.com'session=requests.Session()chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')chrome_options.add_argument('--no-sandbox')driver = webdriver.Chrome(executable_path='path of chromedriver',chrome_options=chrome_options) r=session.get(url)if len(re.findall('document.cookie="L7FW=.*',r.text))>0:    self.driver.get(url)    cookie=driver.get_cookies()    session.cookies=requests.utils.cookiejar_from_dict(cookie)    r=session.get(url)print(r.text)

[*]第三阶段:封锁IP阶段
到了这个阶段,基本上discuz已经认定你是爬虫了,所以直接锁死你的ip一段时间。这种情况下:①通过代{过}{滤}理访问;②放弃
由于我当时是用来做“邀请人查询网站”的网站爬虫,既然论坛锁死ip了,就不想继续花费更多成本去搞,所以就没有继续用代{过}{滤}理去写。

Hmily 发表于 2019-7-17 11:20

申请会员ID:Abbeyok【申请通过】
https://www.52pojie.cn/thread-965862-1-1.html


你脸是租来的吗?

xtuuqtbl 发表于 2019-7-17 11:51

Hmily 发表于 2019-7-17 11:20
你脸是租来的吗?

哈哈哈,笑死我了

那边 发表于 2019-7-17 12:16

xtuuqtbl 发表于 2019-7-17 11:51
哈哈哈,笑死我了

我能再笑一下吗?哈哈哈哈哈哈哈哈哈哈哈哈哈!

FleTime 发表于 2019-7-17 12:39

我擦,用论坛的帖子申请论坛账号。。。

ggogg928 发表于 2019-7-17 15:41

还能通过?

昵称太骚已屏蔽 发表于 2019-7-17 17:40

吾爱游客?没事,谁都不认识

大桥未久 发表于 2019-7-21 11:46

我擦,用论坛的帖子申请论坛账号。。

Jonny0201 发表于 2019-7-30 18:04

昵称太骚已屏蔽 发表于 2019-7-17 17:40
吾爱游客?没事,谁都不认识

IP 有记录, 大概知道住什么区域
笑死我了

庄ZY颜 发表于 2019-8-4 03:16

这么厉害的吗?666
页: [1] 2
查看完整版本: 申请会员ID:TanTan【冒充他人作品申请】