使用ChatGPT写一个二次元动漫图片爬虫

相关阅读

PHP接口代码

这个PHP接口代码是我们之前已经写好的了

<?php
//读取文本
include '../black.php';

$str = explode("\n", file_get_contents('sinetxt.txt'));
$k = rand(0,count($str));
$sina_img = str_re($str[$k]);

$size_arr = array('large', 'mw1024', 'mw690', 'bmiddle', 'small', 'thumb180', 'thumbnail', 'square');
$size = !empty($_GET['size']) ? $_GET['size'] : 'large' ;
$server = rand(1,4);
if(!in_array($size, $size_arr)){
	$size = 'large';
}
$url = 'http://i3.wp.com/wx'.$server.'.sinaimg.cn/'.$size.'/'.$sina_img.'.jpg';
//解析JSON
$result=array("code"=>"200","acgurl"=>"$url");

$type=$_GET['return'];
switch ($type)
{   
   
//格式解析                             
case 'json':
$path = "$url";
$pathinfo = pathinfo($path);
$imageInfo = getimagesize($url);  
$result['width']="$imageInfo[0]";  
$result['height']="$imageInfo[1]";
$result['size']="$pathinfo[extension]"; 
header('Content-type:text/json');
echo json_encode($result);
break;
//不输出图片链接直接显示                             
case 'img':
$img = file_get_contents($url,true);
header("Content-Type: image/jpeg;");
echo $img;
break;
//IMG
default:
header("Location:".$result['acgurl']);
break;
//HTTPS图片输出                             
case 'https':
$url=str_replace("http","https", $result['acgurl']);
header("Location:".$url);
break;
//HTTP图片输出                             
case 'http':
header("Location:".$result['acgurl']);
break;
}
function str_re($str){
  $str = str_replace(' ', "", $str);
  $str = str_replace("\n", "", $str);
  $str = str_replace("\t", "", $str);
  $str = str_replace("\r", "", $str);
  return $str;
}
?>

我们是将二次元动漫图片存在了sinetxt.txt中,可以看到大概是这样子的

图片[1]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

举个例子,我们随便取一个

0072Vf1pgy1foxkijia91j31kw0w0e6g

可以看到是这个图片中的最后面位置,然后拼接了.jpg后缀

图片[2]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

然后热心网友就给我们发了一个别人的接口

https://api.ixiaowai.cn/api/api.php

可以发现访问之后也是跳转类似的地址,实现的思路应该也是将这些二次元动漫先存到TXT中,然后随机选取

图片[3]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

所以我们现在要做的是写个爬虫针对这个接口,我们自动提取图片ID的部分,并将其存入TXT

使用ChatGPT爬取图片ID

我们先提出我们的需求

帮我写一个Python脚本,访问指定网站,每次访问后,它会跳转到类似下面的URL
```
https://i3.wp.com/wx1.sinaimg.cn/large/0072Vf1pgy1foxlo3qh6yj31kw0w01h2.jpg
```
我需要提取其中的
```
0072Vf1pgy1foxlo3qh6yj31kw0w01h2
```
然后这样循环500次,并将提取的内容按行输出到txt文本中
图片[4]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

可以看到ChatGPT直接给出了代码,还不忘最后的时候皮一句

图片[5]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

我们将其粘贴到Pycharm中,我们这里会发现它判断的正则是

/([a-zA-Z0-9]+)\.

我们放到菜鸟工具的正则表达式中,可以看到还能匹配到其他内容

图片[6]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

当然,其实这里已经很简单了,我们可以匹配到.jpg部分

图片[7]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

然后再去掉.jpg

你可以单独提问

图片[8]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

最终修改我们的代码

图片[9]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

最终我们的代码如下

import time
import urllib3
import requests
import re

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://api.ixiaowai.cn/api/api.php"

for i in range(500):
    try:
        response = requests.get(url,verify=False)
        if response.status_code == 200:
            redirect_url = response.url
            match = re.search(r"/([a-zA-Z0-9]+)\.jpg", redirect_url)
            if match:
                code = match.group(1)
                code = code.replace(".jpg", "")
                print(code)
                with open("codes.txt", "a") as f:
                    f.write(code + "\n")
        else:
            print("Error occured while accessing the website.")
            break
    except:
        time.sleep(1)
        response = requests.get(url,verify=False)
        if response.status_code == 200:
            redirect_url = response.url
            match = re.search(r"/([a-zA-Z0-9]+)\.jpg", redirect_url)
            if match:
                code = match.group(1)
                code = code.replace(".jpg", "")
                print(code)
                with open("codes.txt", "a") as f:
                    f.write(code + "\n")
        else:
            print("Error occured while accessing the website.")
            break

我们可以进行测试,可以看到已经自动爬取了,并且存入了code.txt中

图片[10]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

补充说明

当然,你如果完全没有分析代码能力,那你也可以把机器人写好的代码放到Pycharm里去运行,然后看看结果是否会出现报错,或者其他情况,然后再进一步修改代码

图片[11]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

我们将url改成目标API接口地址,然后运行

import requests
import re

url = "https://api.ixiaowai.cn/api/api.php"

for i in range(500):
    response = requests.get(url)
    if response.status_code == 200:
        redirect_url = response.url
        match = re.search(r"/([a-zA-Z0-9]+\.jpg)", redirect_url)
        if match:
            code = match.group(1)
            code = code[:-4]
            print(code)
            with open("codes.txt", "a") as f:
                f.write(code + "\n")
    else:
        print("Error occured while accessing the website.")
        break

发现出现了下面的报错

Max retries exceeded with url: /api/api.php (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate
图片[12]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

我们选择无脑复制上面的报错,继续向ChatGPT提问,可以看到这里提供了两个解决方案,我们这里选择第一种

图片[13]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

然后无脑继续让他帮我们修改

import requests
import re

url = "https://api.ixiaowai.cn/api/api.php"

for i in range(500):
    response = requests.get(url,verify=False)
    if response.status_code == 200:
        redirect_url = response.url
        match = re.search(r"/([a-zA-Z0-9]+\.jpg)", redirect_url)
        if match:
            code = match.group(1)
            code = code[:-4]
            print(code)
            with open("codes.txt", "a") as f:
                f.write(code + "\n")
    else:
        print("Error occured while accessing the website.")
        break
图片[14]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

我们运行代码,发现已经可以采集了,但是还会有warning

InsecureRequestWarning: Unverified HTTPS request is being made to host 'i3.wp.com'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  warnings.warn(
图片[15]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

继续提出我们的需求

图片[16]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

然后我们叫他帮我们添加到代码中

图片[17]-使用ChatGPT写一个二次元动漫图片爬虫-FancyPig's blog

最终代码如下

import requests
import re
import warnings
from requests.packages.urllib3.exceptions import InsecureRequestWarning

warnings.simplefilter('ignore', InsecureRequestWarning)

url = "https://api.ixiaowai.cn/api/api.php"

for i in range(500):
    response = requests.get(url,verify=False)
    if response.status_code == 200:
        redirect_url = response.url
        match = re.search(r"/([a-zA-Z0-9]+\.jpg)", redirect_url)
        if match:
            code = match.group(1)
            code = code[:-4]
            print(code)
            with open("codes.txt", "a") as f:
                f.write(code + "\n")
    else:
        print("Error occured while accessing the website.")
        break

然后我们就定期运行一下,或者修改循环次数将500改成其他的数字,让他一直运行就好了,最后我们把内容拷贝到服务器上的sinetxt.txt中就行了。

或者这里可能也有聪明的热心网友,直接将代码中codes.txt改成sinetxt.txt,在服务器上运行,还可以实现自动化采集后存储,这样相当于别人接口里有什么图片,我们就抓对应的图片并将其本地化,这样后面就不用每次都访问第三方的接口了,直接从我们的txt文件里读取图片ID,然后调用新浪的动漫图片资源。

© 版权声明
THE END
喜欢就支持一下吧
点赞16赞赏 分享
评论 共5条

请登录后发表评论