网页抓取解密(可证运行基于小甲鱼视屏的代码修改:图片的网址 )

优采云 发布时间: 2022-01-06 02:09

  网页抓取解密(可证运行基于小甲鱼视屏的代码修改:图片的网址

)

  参考:添加链接描述并进行一些修改使其运行

  基于小龟视频修改代码:(图片的URL是base64加密的,需要解密才能正常使用):

  在一般网页上,图片和下一张图片之间,地址是数字变化:

  第一个的网址是:

  

  下一个是:

  

  并且视频画面中的页面对URL使用base64加密

  

  

  这里的 MjAyMDA4MDktMTIx 实际上是加密信息:

  用解码知道是20200809-121

  并121查看网页信息:即当前图片

  

  获取当前日期的代码:

import datetime

time = datetime.datetime.now().strftime('%Y%m%d-')

import base64

# 获取经过base64加密后的字母串

def get_base64(s): # 传入一个待加密的字符串t

bs = str(base64.b64encode(s.encode("utf-8")), "utf-8")

return bs

  用它来加密20200809-121,可以知道结果和网页一样,所以可验证的URL是用base64加密的

  

  抓取图片的源码如下:

  主要方法:

  1、首先创建一个文件并命名为“ooxx”

  2、get_page() 函数看起来像这样:它返回页面的数字部分

  

  def get_page(url):

#获取当前网页图片是第几张,以此为基准下载图片

html=url_open(url).decode('utf-8')

a=html.find('current-comment-page')+23

b=html.find(']',a)

return html[a:b]

  def download(folder='ooxx',pages=10):

os.mkdir(folder)

os.chdir(folder)

url='http://jandan.net/ooxx/'

page_num=int(get_page(url))

for i in range(pages): # 只获取前10页的数据

page_num -= i

page_url = url + get_base64(time + str(page_num)) + '#comments'

# 找到当前页面的所有图片

img_addrs = find_imgs(page_url)

save_imgs(folder, img_addrs)

  3、for i in range(pages): # 获取前10页的数据只表示从当前页获取数据,第一次减0为当前页,第二次减1是下一页。以此类推,一共10页,page_url:指的是每一页的地址

  4、获取page_url:关键点

  测试:能否正确获取页码为121的页地址:

  

  操作结果:

  

  网站链接:

  

  于是找到了页面的地址,接下来就是获取页面的源代码,从源代码中获取图片的位置

  5、如何通过URL获取html页面内容:

  设置请求头,目的是让爬虫操作拥有计算机的身份

  def url_open(url):

#设置headers,使我们的程序访问看上去像是人为

req=urllib.request.Request(url)#创建request对象,利用request对象访问

req.add_header('user-AGENT','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36')

response=urllib.request.urlopen(req)

html=response.read()

#print(html)

return html

  6、find_imgs 函数:通过html内容获取图片地址,正则表达式还没提到,暂时用find方法

  就是获取img src之后,.jpg之前的内容。然后设置一个循环,找出当前页面所有符合条件的图片,然后保存

  def find_imgs(url):

html=url_open(url).decode('utf-8')

img_addrs=[]

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

while(a!=-1):

b=html.find('.jpg',a,a+255)#没找到就会返回-1

if b!=-1:

img_addrs.append('http:'+html[a+9:b+4])

else:

b=a+9

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

#用于得到,存放图片地址

#for each in img_addrs:

# print(each)

return img_addrs

  7、找到地址下载保存

  def save_imgs(folder,img_addrs):

for each in img_addrs:

filename=each.split('/')[-1]#取url最后一段作为名字

with open(filename,'wb') as f:

img=url_open(each)

f.write(img)

  import base64

import urllib.request

import os

import datetime

time=datetime.datetime.now().strftime("%Y%m%d-")

#得到经过base64加密后的字符串

def get_base64(s): # 传入一个待加密的字符串t

bs = str(base64.b64encode(s.encode("utf-8")), "utf-8")

return bs #因为所要获取的网页是经过base64加密的,因此我们需要利用此来正确访问页面

#打开页面

def url_open(url):

#设置headers,使我们的程序访问看上去像是人为

req=urllib.request.Request(url)

req.add_header('user-AGENT','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36')

response=urllib.request.urlopen(req)

html=response.read()

#print(html)

return html

def get_page(url):

#获取当前网页图片是第几张,以此为基准下载图片

html=url_open(url).decode('utf-8')

a=html.find('current-comment-page')+23

b=html.find(']',a)

return html[a:b]

def find_imgs(url):

html=url_open(url).decode('utf-8')

img_addrs=[]

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

while(a!=-1):

b=html.find('.jpg',a,a+255)#没找到就会返回-1

if b!=-1:

img_addrs.append('http:'+html[a+9:b+4])#需要加上http:否则获取的地址是无法识别的url

else:

b=a+9

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

#用于得到,存放图片地址

#for each in img_addrs:

# print(each)

return img_addrs#需要返回这个地址链表,否则在save_img中无法迭代

def save_imgs(folder,img_addrs):

for each in img_addrs:

filename=each.split('/')[-1]

with open(filename,'wb') as f:

img=url_open(each)

f.write(img)

def download(folder='ooxx',pages=10):

os.mkdir(folder)

os.chdir(folder)

url='http://jandan.net/ooxx/'

page_num=int(get_page(url))

for i in range(pages): # 只获取前10页的数据

page_num -= i

page_url = url + get_base64(time + str(page_num)) + '#comments'

# 找到当前页面的所有图片

img_addrs = find_imgs(page_url)

save_imgs(folder, img_addrs)

if __name__=='__main__':

download()

  终于成功抓取图片

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线