python爬虫练习(一):爬取27270游戏场景原画图片
学习一下随便写着玩的
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
#爬取27270游戏场景原画图片
#思路:每获取一次图片链接,进行一次图片的下载保存
class Picture27270():
def __init__(self):
self.url='https://www.27270.net/game/youxijietu/list_18_{}.html'
self.headers={'user-agent':UserAgent().random}
#获取每一页中的游戏原画图片页的url
def parse_href1(self,url):
html=requests.get(url=url,headers=self.headers).text
tree=etree.HTML(html)
url_list=tree.xpath('/html/body/div[2]/div[1]/div[5]/ul/li/a/@href')
for i in url_list:
#print(i)
self.parse_href2(i)
#获取图片页中各图片的url发给下载函数
def parse_href2(self,url):
html = requests.get(url=url, headers=self.headers).text
tree = etree.HTML(html)
# 向保存函数发第一页的url
self.save_html(str(url))
#分析规则发现解析总页数拼接各页图片url
num = tree.xpath('//*[@id="pageinfo"]/@pageinfo')
if bool(num):
for i in list(num):
# 向保存函数发其余页的url
for a in range(int(i)-1):
b=a+2
c=url[:-5]
url_num=c+"_"+str(b)+".html"
self.save_html(str(url_num))
#print("多图"+url_num,type(url_num))
def save_html(self,url):
html=requests.get(url=url,headers=self.headers).text
tree=etree.HTML(html)
#设置爬取到的数据编码格式及解码格式,全角的斜杠替换进行路径名称斜杠替换
name=tree.xpath('/html/body/div[2]/div[2]/h1/text()')[0].encode("iso-8859-1").decode("gbk").replace('/','/') .replace('\\','\')
img_href=tree.xpath('//*[@id="picBody"]//img/@src')[0]
img=requests.get(url=img_href,headers=self.headers).content
with open('F:/download/picture/youxi/'+str(name)+'.jpg','wb') as f:
f.write(img)
print(name+'-下载成功')
def run(self):
num=input('请输入要爬取的总页数:')
for i in range(1,int(num)+1):
url=self.url.format(i)
self.parse_href1(url)
if __name__=='__main__':
spider=Picture27270()
spider.run()