用户:
Q_A_G________查看:1 回复:2 评论:1 创建时间:2022-01-29T16:36:37
Hello 大家好,今天我来发我的第一个python爬虫教程(其实是第一个教程)。
目标是-爬取编程猫道具素材里的武器的所有素材。
话不多说,开始吧!

我先试着用findAll或Xpath来获取。
结果找不到,上网查了一下,找到了这个:“异步加载,它能够在不刷新原网页的情况下通过一些特定的操作来触发刷新一部分页面”!
那么,我也来试试,果然找到了:

并且每次翻页,offset+30

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

于是,开始写代码了:
#-*- 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的下一个,火箭的时候,报错了

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

可以看到,链接中包含中文,所以报错,不过怎么办呢?
这时就得把中文转成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)
第一次写教程,如有错误,欢迎指正!
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
评论