鱼C论坛

 找回密码
 立即注册
查看: 1181|回复: 5

56讲 OOXX 煎蛋网反爬问题,程序写完了才在最后一步触发反爬程序,绝望!!

[复制链接]
发表于 2020-8-14 21:38:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
煎蛋网对图片有保护,只能爬到一个防伪码,请教这是哪种反爬措施,有破解方法吗?没有完美结束这一课的学习,让我强迫症很不爽,代码,运行结果如下:
  1. from urllib import request
  2. from bs4 import BeautifulSoup
  3. import re
  4. import base64
  5. import os

  6. def main():
  7.     #新建文件夹
  8.     os.mkdir('OOXX')
  9.     os.chdir('OOXX')
  10.    
  11.     url='http://jandan.net/ooxx'
  12.     #爬取页面
  13.     headers={}
  14.     headers['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
  15.     req=request.Request(url,headers=headers)
  16.     response=request.urlopen(req).read().decode('utf-8')
  17.     #调用soup处理页面
  18.     soup=BeautifulSoup(response,'html.parser')
  19.     links_list=soup.find(attrs={'class':'cp-pagenavi'})
  20.     #调用函数寻找初始页码链接,links为字典{page:'',link:''}
  21.     pages_list=findlinks(links_list)
  22.     page=int(pages_list['page'])
  23.     page_link='http:'+pages_list['link']
  24.     stop_page=page-5
  25.     #爬取当前页的图片
  26.     comment_list=soup.find(attrs={'id':'comments'})
  27.     print(comment_list)
  28.     img_list=comment_list.find_all('img')
  29.     print(img_list)
  30.     #下载指定图片
  31.     for item in img_list:
  32.         img_url='http:'+item['src']
  33.         print(img_url)
  34.         filename=item['src'].split('/')[-1]
  35.         headers2={}
  36.         headers2['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
  37.         req2=request.Request(img_url,headers=headers)
  38.         response2=request.urlopen(req2).read()
  39.         with open(filename,'wb') as f:
  40.             f.write(response2)
  41.    
  42.    
  43.     while True:
  44.         #爬取图片
  45.         find_img(page_link)
  46.         #处理链接(返回下一个页面对应的链接)
  47.         page_link=handle_link(page_link)
  48.         
  49.         page-=1
  50.         if page==stop_page:
  51.             break

  52. def findlinks(links_list):
  53.     target=links_list.find('a')
  54.     page=target.text
  55.     link=target['href']
  56.     res={'page':page,'link':link}
  57.     return res

  58. def handle_link(page_link):
  59.     page_num=re.search('jandan.net/ooxx/(.+?)#',page_link).group(1)
  60.     page_num=str(base64.b64decode(page_num),'utf-8')
  61.     num=page_num.split('-')[1]
  62.     date=page_num.split('-')[0]
  63.     num=str(int(num)-1)
  64.     page_num='-'.join((date,num))
  65.     page_num=str(base64.b64encode(page_num.encode('utf-8')),'utf-8')
  66.     link='http://jandan.net/ooxx/'+page_num+'#comments'
  67.     return link

  68. def find_img(page_link):
  69.     #爬取对应页面内容
  70.     headers={}
  71.     headers['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
  72.     req=request.Request(page_link,headers=headers)
  73.     response=request.urlopen(req).read().decode('utf-8')
  74.     #使用BeautifulSoup获取指定图片
  75.     soup=BeautifulSoup(response,'html.parser')
  76.     comment_list=soup.find(attrs={'class':'commentlist'})
  77.     img_list=comment_list.find_all('img')
  78.     #下载指定图片
  79.     for item in img_list:
  80.         img_url='http:'+item['src']
  81.         filename=item['src'].split('/')[-1]
  82.         headers2={}
  83.         headers2['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
  84.         req2=request.Request(img_url,headers=headers)
  85.         response2=request.urlopen(req2).read()
  86.         with open(filename,'wb') as f:
  87.             f.write(response2)
  88.    



  89. if __name__=='__main__':
  90.     main()

复制代码
运行结果:
微信图片_20200814213745.png

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-3 11:12:15 | 显示全部楼层

回帖奖励 +3 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-12-16 17:47:35 | 显示全部楼层

回帖奖励 +3 鱼币

对此我也很焦灼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-12-22 12:20:31 | 显示全部楼层

回帖奖励 +3 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-2-14 14:03:43 | 显示全部楼层
网页好像只是加了一个base64的数字加密,2021.2.14亲测可运行
  1. import urllib.request
  2. import os
  3. import base64

  4. def url_open(url):
  5.     req = urllib.request.Request(url)
  6.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
  7.     response = urllib.request.urlopen(req)
  8.     html = response.read()

  9.     return html


  10. def get_page(url):
  11.     html = url_open(url).decode('utf-8')

  12.     a = html.find('current-comment-page')+23
  13.     b = html.find(']',a)

  14.     return html[a:b]


  15. def find_imgs(url):
  16.     html = url_open(url).decode('utf-8')
  17.     img_addrs = []

  18.     a = html.find('img src=')

  19.     while a != -1:
  20.         b = html.find('.jpg',a,a+255)
  21.         if b != -1:
  22.             img_addrs.append(html[a+9:b+4])
  23.         else:
  24.             b = a + 9

  25.         a = html.find('img src=',b)

  26.     return img_addrs

  27.    
  28. def save_imgs(folder,img_addrs):
  29.      for each in img_addrs:
  30.          filename = each.split('/')[-1]
  31.          with open(filename,'wb') as f:
  32.              each = 'http:' + each
  33.              img = url_open(each)
  34.              f.write(img)
  35.             
  36. def download_mm(folder='ooxx1',pages=10):
  37.     os.mkdir(folder)
  38.     os.chdir(folder)

  39.     url = 'http://jandan.net/ooxx'
  40.     page_num = int(get_page(url))

  41.     for i in range(pages):
  42.         page_num -= 1

  43.         #日期+base64转码(下方改日期)
  44.         targt_num = '20210114-' + str(page_num)
  45.         targt_num = base64.b64encode(targt_num.encode('utf-8'))
  46.         
  47.         page_url = url +'/' + str(targt_num,'utf-8')+'#comments'#网页链接
  48.         img_addrs = find_imgs(page_url)#图片地址
  49.         save_imgs(folder, img_addrs)#图片地址保存

  50. if __name__ == "__main__":
  51.     download_mm()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-3-10 09:27:25 | 显示全部楼层
qqw 发表于 2021-2-14 14:03
网页好像只是加了一个base64的数字加密,2021.2.14亲测可运行

请教怎么分析出是base64加密的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-26 21:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表