0x01 发送网页请求 在python项目中引入一个requests库,用来发送网页请求
1 2 3 4 import requestsimport reimport os
复制蔚蓝档案wiki的网址,
1 url1 = "https://www.gamekee.com/ba/"
有的网站会有基础的反爬检测,通过你请求的user-agent来测试你是不是爬虫的,虽然wiki这里没有反爬检测,如果遇到这种检测的话,可以手动更换user-agent来绕过,如下图。
1 2 3 4 5 6 7 8 import requestsurl1 = "https://www.gamekee.com/ba/" headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0' } response = requests.get(url1, headers = headers) print (response.request)
0x02 解析网页内容 我们的任务是
进入如下图的所有学生的网页,然后再是下载图片,所以我们可以先根据正则把这些网页都搜索下来,最后循环依次进入。
1 2 """解析网页""" temp_urls = re.findall('<a href="(.*?)" title=".*?" class="item" data-v-df5d5428>.*?</a>' ,html)
这里有个让我很难绷的事情,就是用此法读取出来的字符串,会带有一大段的前缀,只有最后一小部分是需要的网址,我这里用日奈举例子。
1 2 temp_urls = re.findall('<a href="(.*?)" title="日奈" class="item" data-v-df5d5428>.*?</a>' ,html) print (temp_urls)
代码返回这些字符串,只有最后一段是我们所需要的,不知道是什么反爬手段,一次获取就获取一堆。
我们这里用分割法把这些字符串分割开,只取最后一块网址。
1 2 3 4 5 6 7 8 9 10 11 12 13 """解析网页""" temp_urls = re.findall('<a href="(.*?)" title=".*?" class="item" data-v-df5d5428>.*?</a>' ,html) """读取特定角色的网页""" get_url_or_not = False for url in temp_urls: part_of_url = url.split('<a href="' )[-1 ] if re.search('59934' ,part_of_url): get_url_or_not = True if get_url_or_not: urls.append( 'https://www.gamekee.com' + part_of_url ) if re.search('603140' ,part_of_url): get_url_or_not = False
如上代码,我们发现角色的网址是59934到603140,写一个if语句判断,然后用split('<a href="')
分割得到网址。
0x03 获取网页内图片
分析网页的图片源的源码,匹配前后红色部分,其余部分用.*?
任意非贪婪匹配来代替,然后提取图片中蓝色部分的图片源
1 2 3 4 5 6 7 8 9 10 11 url = urls[0 ] response = requests.get(url, headers = headers) html = response.text download_url = re.findall('data-real=".*?" src="(.*?)">.*?解锁等级' ,html)[0 ] print ("https:" + download_url)file_name = '0'
按照这个思路把循环代码补全,记得加上time.sleep,缓冲一下速度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 """生成打包图片的文件夹""" dir_name = r'F:\picture_bed\My_own_pic_bed\img' if not os.path.exists(dir_name): os.mkdir(dir_name) """解析图片""" for file_name, url in enumerate (urls): time.sleep(0.5 ) response = requests.get(url, headers = headers) html = response.text try : download_url = "https:" + re.findall('data-real=".*?" src="(.*?)".*?解锁等级' ,html)[0 ] except : continue response = requests.get(download_url, headers = headers) path = dir_name + '\\' + str (file_name) + '.png' with open (path, 'wb' ) as f: f.write(response.content)
(这里我解锁等级呢,唯一一张匹配失败的图片)
0x04 导入到html文件生成随机图床
这里成功把图片弄到图床文件夹后,根据这些图片的名字,用python写个脚本导出图片名字列表,然后填入到写好的html文件中,随机重定向就能生成随机图床了。
1 2 3 4 5 6 7 <script language ="javascript" type ="text/javascript" > var a = [这里放网址] var item = a[Math .floor (Math .random () * a.length )]; var b = String (item) window .location .href = b; </script >
由于我不懂html语法,这个脚本是网上抄的,以后有机会再学学看,我这里就先傻瓜式帮运网址名了。
1 2 3 4 5 urls = [] for i in range (177 ): urls.append("https://my-own-pic-bed.pages.dev/img/" + str (i) + ".png" ) print (urls)
0x05 部署到github
在这个文件夹里打开git bash,部署,第一次可能有点久
1 2 3 4 5 # 将更改提交 git add . git commit -m "更新图片" # 推送至github仓库 git push
然后直接访问下面的网址
1 my-own-pic-bed.pages.dev/rand.html
成功了。