python爬蟲練習(xí)(一):爬取27270游戲場景原畫圖片
學(xué)習(xí)一下隨便寫著玩的
import requests
from lxml import etree
from fake_useragent import UserAgent
import os
#爬取27270游戲場景原畫圖片
#思路:每獲取一次圖片鏈接,進(jìn)行一次圖片的下載保存
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發(fā)給下載函數(shù)
? ?def parse_href2(self,url):
? ? ? ?html = requests.get(url=url, headers=self.headers).text
? ? ? ?tree = etree.HTML(html)
? ? ? ?# 向保存函數(shù)發(fā)第一頁的url
? ? ? ?self.save_html(str(url))
? ? ? ?#分析規(guī)則發(fā)現(xiàn)解析總頁數(shù)拼接各頁圖片url
? ? ? ?num = tree.xpath('//*[@id="pageinfo"]/@pageinfo')
? ? ? ?if bool(num):
? ? ? ? ? ?for i in list(num):
? ? ? ? ? ? ? ?# 向保存函數(shù)發(fā)其余頁的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)
? ? ? ?#設(shè)置爬取到的數(shù)據(jù)編碼格式及解碼格式,全角的斜杠替換進(jìn)行路徑名稱斜杠替換
? ? ? ?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('請(qǐng)輸入要爬取的總頁數(shù):')
? ? ? ?for i in range(1,int(num)+1):
? ? ? ? ? ?url=self.url.format(i)
? ? ? ? ? ?self.parse_href1(url)
if __name__=='__main__':
? ?spider=Picture27270()
? ?spider.run()