在网络上逛,经常发现有些图片非常好看,想收藏做壁纸,可是呢,一张一张收藏下载,手都酸了,怎么办呢?这里我们就要用到爬虫的技术了。
首先呢,我们查看一下壁纸网页的源码,如下图,可以使用XPath或者CSS Selector定位到当前图集,可以看到,当前图集有很多图片的页面地址,我们记录下它们的URL,如下图:
其次呢,我们取到当前图集的URL后呢,我们肯定想取到下一图集,用同样的方式定位一下下一页的地址,如图,红圈处就是下一页的地址:
代码如下,这样我们就可以取到所有图片的页面地址:
def getThumbUrls(nextPage): url = nextPage response = requests.get(url) selector = etree.HTML(response.content) pageUrls = selector.xpath(//div[@class=”wb_down_listbox”]//div[@class=”swiper-slide”]/a/@href) pageUrls = set([base_url+url for url in pageUrls]) try: nextPage = base_url + selector.xpath(“//div[@class=wb_show_sxs wb_show_sxx]/dl/dd/a/@href”)[0] except: nextPage = None print(pageUrls, nextPage) return pageUrls, nextPage取到 所有图片的页面地址之后呢,我们就可以取到所有图片的高清地址,红圈所示,就是图片的高清地址:
我们使用如下的代码获取所有图片的高清地址:
def download(pageUrls): imgUrls = set() for pageUrl in pageUrls: response = requests.get(pageUrl) selector = etree.HTML(response.content) imgUrl = selector.xpath(//div[@class=”wb_downpic_main”]/div[@id=”down_inner_box”]/img[@id=”down_main_pic”]/@src)[0] imgUrls.add(imgUrl) print(imgUrls) return imgUrls最后保存图片
async def saveFile(imgUrl): path = rD:\Soft\Images\bmp fileType = re.findall(r.*(\..*)$, imgUrl)[0] fileName = str(uuid.uuid4()) + fileType fullPath = os.path.join(path, fileName) content = requests.get(imgUrl).content with open(fullPath, wb) as f: f.write(content)我们异步起动,然后开始图片的下载吧!
async def main(nextPage): pageUrls, nextPage = getThumbUrls(nextPage) imgUrls = download(pageUrls) for imgUrl in imgUrls: await saveFile(imgUrl) if not nextPage: return await main(nextPage) if __name__ == __main__: nextPage = rhttp://www.deskcity.org/download/1184-0-0x0.html loop = asyncio.get_event_loop() task = [asyncio.ensure_future(main(nextPage))] loop.run_until_complete(asyncio.wait(task)) loop.close()看看效果,不错吧?
我是一个程序媛,请大家关注我吧!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END