猫史档案馆


【python爬虫教程-爬取编程猫素材】

用户:Q_A_G________Q_A_G________查看:1 回复:2 评论:1 创建时间:2022-01-29T16:36:37


Hello 大家好,今天我来发我的第一个python爬虫教程(其实是第一个教程)

目标是-爬取编程猫道具素材里的武器的所有素材。

话不多说,开始吧!

center_image

我先试着用findAll或Xpath来获取。

结果找不到,上网查了一下,找到了这个:异步加载,它能够在不刷新原网页的情况下通过一些特定的操作来触发刷新一部分页面”

那么,我也来试试,果然找到了:

center_image

它请求的目标网址是这个:https://api.codemao.cn/web/materials?filter_type=CATEGORY&offset=0&limit=30&uncollected=false&category_path=/0003/0001&sort=LATEST_ONLINE(我选中的地方)

并且每次翻页,offset+30

center_image

接着分析json,就知道网址是在["items"][第几张图片]["resource_urls"][一般是0,如果是动态图,那么就会有好几张]

center_image

于是,开始写代码了:

#-*- coding : utf-8-*-
import requests
import json
import urllib.request

def get_image(n):
    global rawData
    for a in range(len(rawData["items"][n]["resource_urls"])):
        url = rawData["items"][n]["resource_urls"][a]
        name ="D:\\download\\{}.jpg".format(rawData["items"][n]["name"]+"-"+str(a+1))
        conn = urllib.request.urlopen(url)
        f = open(name,'wb')
        print(rawData["items"][n]["name"]+"-"+str(a+1))
        f.write(conn.read())
        f.close()
for x in range(30):
    print("正在爬取第{}页".format(x+1))
    url = 'https://api.codemao.cn/web/materials?filter_type=CATEGORY&offset={}&limit=30&uncollected=false&category_path=/0003/0001&sort=LATEST_ONLINE'.format(x*30)
    for i in range(30):
        r = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win喵; x喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/68.0.3440.84 Safari/537.36'})
        rawData = json.loads(r.content)#返回字典
        get_image(i)

但是,在爬取关卡4刺1的下一个,火箭的时候,报错了

center_image

是在conn = urllib.request.urlopen(url)这一行报错,所以我们来看看链接

center_image

可以看到,链接中包含中文,所以报错,不过怎么办呢?

这时就得把中文转成utf-8

导入这个

from urllib.parse import quote

但是不能直接把链接转换,要只转换后面一部分,因为如果直接转换,":"就会也被转换成%......

所以加上这句

url = url[0:14]+quote(url[14:])

OK,终于大功告成了!

完整代码

#-*- coding : utf-8-*-
import requests
import json
import urllib.request
from urllib.parse import quote

def get_image(n):
    global rawData
    for a in range(len(rawData["items"][n]["resource_urls"])):
        url = rawData["items"][n]["resource_urls"][a]
        url = url[0:14]+quote(url[14:])
        name ="D:\\download\\{}.jpg".format(rawData["items"][n]["name"]+"-"+str(a+1))
        conn = urllib.request.urlopen(url)
        f = open(name,'wb')
        print(rawData["items"][n]["name"]+"-"+str(a+1))
        f.write(conn.read())
        f.close()
for x in range(30):
    print("正在爬取第{}页".format(x+1))
    url = 'https://api.codemao.cn/web/materials?filter_type=CATEGORY&offset={}&limit=30&uncollected=false&category_path=/0003/0001&sort=LATEST_ONLINE'.format(x*30)
    for i in range(30):
        r = requests.get(url,headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win喵; x喵) AppleWebKit/537.36 (KH喵L, like Gecko) Chrome/68.0.3440.84 Safari/537.36'})
        rawData = json.loads(r.content)#返回字典
        get_image(i)

第一次写教程,如有错误,欢迎指正!


回复

上一页1 页 / 共 1下一页
Q_A_G________Q_A_G________

对了,倒数第四行的headers的"喵"是去空格的"T  M",被屏蔽了。 imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%BF%BB%E7%99%BD%E7%9C%BC.gif"alt="emotion_编程猫_翻白眼"imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%BF%BB%E7%99%BD%E7%9C%BC.gif"alt="emotion_编程猫_翻白眼"imgsrc="https://static.codemao.cn/emoji/codemao/%E7%BC%96%E7%A8%8B%E7%8C%AB_%E7%BF%BB%E7%99%BD%E7%9C%BC.gif"alt="emotion_编程猫_翻白眼"

点赞1


评论


zx某zx某

评论=收藏

 

点赞0


评论