赞
踩
爬取彼岸壁纸,批量下载图片,并保存到本地。
软件:Pycharm
第三方库:requests,fake_useragent,lxml
网站地址:http://www.netbian.com/meinv/
打开网站看一下。
F12检查,审查元素。
可以获取到该图片的URL地址,尝试打开看一下。
可以看到这是一张分辨率很低的图片,并不是我们要图片。
因此我们只有先进入内页进行抓取图片。
先获取红色框地址链接,进入内页。
高清图片再也藏不住了。
继续审查元素
可以找到高清图片地址。以上只是获取一个,若是获取全部只要在首页中拿到全部小图地址链接进入内页解析即可全部获取,不再赘述。至于多页爬取,请继续浏览。
分析完毕,接下来代码操作。
同一个ip地址去多次访问会面临被封掉的风险,这里采用fake_useragent,产生随机的User-Agent请求头进行访问。
import requests from fake_useragent import UserAgent from lxml import etree class BiAn(): def __init__(self): self.url = 'http://www.netbian.com/meinv/' ua = UserAgent() for i in range(1, 100): self.headers = { 'User-Agent': ua.random } def main(self): pass if __name__ == '__main__': spider = BiAn() spider.main()
发送请求,获取网页。
def get_html(self, url):
response = requests.get(url, headers=self.headers)
html = response.content.decode('gbk')
return html
注:html = response.content.decode(‘gbk’)
获取每个图片url链接
def parse_html(self, html):
target = etree.HTML(html)
links = target.xpath('//*[@id="main"]/div[4]/ul/li/a/@href')
for link in links:
print('http://www.netbian.com' + link)
此刻已经拿到了进入内页的url,再次进入内页解析可以获得到真正高清的图片链接,即我们需要的。
target_html = self.get_html(target_link)
target = etree.HTML(target_html)
result_src = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@src')[0]
print(result_src)
效果图展示
第一页链接
第二页链接
第三页链接
可以总结出除了第一页比较特殊外,其它的都是
http://www.netbian.com/meinv/index_页码.htm
pages = int(input("请输入要爬取的页数:")) # 想要爬取的总页数
for page in range(1,pages+1):
if page == 1:
url = self.url
else:
url = self.url + 'index_{}.htm'.format(page)
html = self.get_html(url)
self.parse_html(html)
print("第%s页爬取完成。。。"%page)
# 创建保存图片的文件夹
self.folder_name = './temp_data/'
if not os.path.exists(self.folder_name):
os.mkdir(self.folder_name)
result_src_name = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@title')[0]
img = requests.get(result_src, headers=self.headers)
with open('./temp_data/'+result_src_name+'.jpg','wb')as f:
f.write(img.content)
看一下本地文件。
import requests import os from fake_useragent import UserAgent from lxml import etree class BiAn(): def __init__(self): self.url = 'http://www.netbian.com/meinv/' ua = UserAgent() for i in range(1, 100): self.headers = { 'User-Agent': ua.random } # 创建保存图片的文件夹 self.folder_name = './temp_data/' if not os.path.exists(self.folder_name): os.mkdir(self.folder_name) def get_html(self, url): response = requests.get(url, headers=self.headers) html = response.content.decode('gbk') return html def parse_html(self, html): target = etree.HTML(html) links = target.xpath('//*[@id="main"]/div[4]/ul/li/a/@href') for link in links: target_link = 'http://www.netbian.com' + link target_html = self.get_html(target_link) target = etree.HTML(target_html) result_src = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@src')[0] result_src_name = target.xpath('//*[@id="main"]/div[3]/div/p/a/img/@title')[0] img = requests.get(result_src, headers=self.headers) with open('./temp_data/'+result_src_name+'.jpg','wb')as f: f.write(img.content) def main(self): pages = int(input("请输入要爬取的页数:")) # 想要爬取的总页数 for page in range(1,pages+1): if page == 1: url = self.url else: url = self.url + 'index_{}.htm'.format(page) html = self.get_html(url) self.parse_html(html) print("第%s页爬取完成。。。"%page) if __name__ == '__main__': spider = BiAn() spider.main()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。