1.:对于URL上,因为时过境迁,网页的url的规律也发生了变化,现在是这样的(当然现在这个网站已经是正规网站了哈哈哈哈):
随手拍 (jandan.net)
http://i.jandan.net/ooxx/MjAyMjA0MjUtMTc=#comments
后缀中的 MjAyMjA0MjUtMTc=是加密后的字符串,因此要通过base64进行解密,解密后发现这些字符串代表的是:当天的年月日-页号,如前面的字符串就是:20220425-17
我处理上面的方法就是引用time模块,获取今天的年月日,组合成符合要求的字符串(因为这个网页的url是根据每一天的日期的不同而改变的,为了保证代码的时效性,获取日期更符合,如果只是试一下,则可以直接输入今天的年月日去爬取)
2.第二点:在爬取照片的链接的时候,爬取的字符串没有前缀“http:”,这个是需要自己去发现的,然后自己拼接后就可以成功了
最后亮代码:
# coding:utf-8
import urllib.request
import os
import time
import base64
#解密
def change_string(string):
string1=base64.b64decode(string).decode()
# print(string1)
return string1
#加密
def add_secret(string):
string2=base64.b64encode(string.encode()).decode()
# print(string2)
return string2
#获取时间
def get_time():
t1=time.localtime()
if len(str(t1.tm_mon))==1:
month='0'+str(t1.tm_mon)
else:
month=str(t1.tm_mon)
if len(str(t1.tm_mday))==1:
mday='0'+str(t1.tm_mday)
else:
mday=str(t1.tm_mday)
year=str(t1.tm_year)
time_string=year+month+mday
return time_string
#打开url
def url_open(url):
req = urllib.request.Request(url)
req.add_header('user-agent',
'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Mobile Safari/537.36 Edg/100.0.1185.50')
response = urllib.request.urlopen(url)
html = response.read()
# print(url)
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]
#获取url中的加密字符串
def get_timestring(page):
time=get_time()
page=time+'-' + str(page)
page=add_secret(page)
return page
#寻找网页中图片
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)
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
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_cc(folder='OOXX',pages=10):
os.mkdir(folder)
os.chdir(folder)
url='http://i.jandan.net/ooxx/'
page_num=int(get_page(url))
for i in range(pages):
page_num-=i
page_url=url+get_timestring(page_num)+'#comments'
print(page_url)
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)
if __name__=='__main__':
download_cc()
然后亮亮我的爬取的照片(哈哈哈哈):