From ecc073a04a0a31602cb9ee50e99fd7a46736c523 Mon Sep 17 00:00:00 2001 From: hihell Date: Thu, 14 Oct 2021 10:29:55 +0800 Subject: [PATCH] =?UTF-8?q?PNG=20IMG=20=E9=87=87=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NO36/imgs/Thread E_vaccine_PNG70.png | Bin 0 -> 16398 bytes ...76\347\211\207\344\270\213\350\275\275.py" | 139 ++++++++++++++++++ README.md | 2 +- 3 files changed, 140 insertions(+), 1 deletion(-) create mode 100644 NO36/imgs/Thread E_vaccine_PNG70.png create mode 100644 "NO36/\345\205\215\346\212\240\345\233\276\347\211\207\344\270\213\350\275\275.py" diff --git a/NO36/imgs/Thread E_vaccine_PNG70.png b/NO36/imgs/Thread E_vaccine_PNG70.png new file mode 100644 index 0000000000000000000000000000000000000000..88e885f5bb38f3668691d75961c7bd72e5de5bc9 GIT binary patch literal 16398 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 aN`If-D2ilQ3jllmXYQ-(s+GX4!~PGaC9+xo literal 0 HcmV?d00001 diff --git "a/NO36/\345\205\215\346\212\240\345\233\276\347\211\207\344\270\213\350\275\275.py" "b/NO36/\345\205\215\346\212\240\345\233\276\347\211\207\344\270\213\350\275\275.py" new file mode 100644 index 0000000..0465d69 --- /dev/null +++ "b/NO36/\345\205\215\346\212\240\345\233\276\347\211\207\344\270\213\350\275\275.py" @@ -0,0 +1,139 @@ +import random +import logging +import threading +from typing import Optional, Text +import requests +from bs4 import BeautifulSoup +import lxml + +logging.basicConfig(level=logging.WARNING) +thread_lock = threading.Lock() + + +class PngImg(threading.Thread): + # 构造函数 + def __init__(self, thread_name, headers_func, requests_func) -> None: + threading.Thread.__init__(self) + self._headers = headers_func() + self._timeout = 5 + self.requests_func = requests_func + self._thread_name = thread_name + + def run(self) -> None: + bast_host = "http://pngimg.com" + while True: + # 全局锁,获取地址 + thread_lock.acquire() + global all_links + if all_links is None: + break + + list_url = bast_host + all_links.pop().get('href') + thread_lock.release() + print(self._thread_name + " 正在运行,采集的地址是 " + list_url) + + list_html_str = self.requests_func(url=list_url, headers=self._headers, timeout=self._timeout) + ret_imgs = self._get_imgs(list_html_str) + + self._save(ret_imgs) + + def _get_imgs(self, html) -> list: + """获取所有的图片地址 + :return: 图片 list + """ + soup = BeautifulSoup(html, 'lxml') + # 获取图片所在 div 标签 + div_imgs = soup.find_all(attrs={'class': 'png_imgs'}) + # 图片地址为空,用来保存图片 tag + + imgs_src = [] + for div_img in div_imgs: + # 遍历 div 标签,检索后代标签中的 img 图片标签 + imgs_src.append(div_img.a.img.get("src")) + + return imgs_src + + def _save(self, imgs): + """保存图片 """ + for img in imgs: + img = img.replace('small/', '') # 去除 small 标记,获取大图 + img_url = "https://pngimg.com{}".format(img) # 拼接完整图片访问地址 + name = img[img.rfind('/') + 1:] + # print(img_url) + # print(name) + + try: + res = requests.get(url=img_url, headers=self._headers, timeout=self._timeout) + except Exception as e: + logging.error(e) + + if res is not None: + name = name.replace("/", "_") + with open(f'./imgs/{self._thread_name}_{name}', "wb+") as f: + f.write(res.content) + + +def get_headers(): + uas = [ + "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)", + "Mozilla/5.0 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)", + "Baiduspider-image+(+http://www.baidu.com/search/spider.htm)", + "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 YisouSpider/5.0 Safari/537.36", + "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)", + "Mozilla/5.0 (compatible; Googlebot-Image/1.0; +http://www.google.com/bot.html)", + "Sogou web spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", + "Sogou News Spider/4.0(+http://www.sogou.com/docs/help/webmasters.htm#07)", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);", + "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)", + "Sosospider+(+http://help.soso.com/webspider.htm)", + "Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)" + ] + ua = random.choice(uas) + headers = { + "user-agent": ua + } + return headers + + +# 通用的 requests get 请求方法 +def get_html(url: Text, headers: dict, timeout: int) -> Optional[Text]: + try: + res = requests.get(url=url, headers=headers, timeout=timeout) + except Exception as e: + logging.error(e) + + if res is not None: + return res.text + else: + return None + + +if __name__ == '__main__': + url = "http://pngimg.com/" + headers = get_headers() + # 获取首页的 HTML 数据 + html_str = get_html(url, headers, 5) + # 解析首页的HTML数据,获取所有列表页链接 + soup = BeautifulSoup(html_str, 'lxml') + + + div_parents = soup.find_all(attrs={'class': 'sub_category'}) + + # 获取到所有的详情页地址 + all_links = [] + for div in div_parents: + all_links.extend(div.find_all('a')) + + print("累计获取到",len(all_links),"个列表页数据") + + # 通过第一个地址进行测试 + # first_url = all_links[0] + # + # list_url = first_url.get('href') + # bast_host = "http://pngimg.com" + # real_url = bast_host + list_url + + threads = ["Thread A", "Thread B", "Thread C", "Thread D", "Thread E"] + for t in threads: + my_thread = PngImg(t, get_headers, get_html) + my_thread.start() diff --git a/README.md b/README.md index 6182ce9..78598a1 100644 --- a/README.md +++ b/README.md @@ -73,7 +73,7 @@ 34. [在120篇系列专栏中,才能学会 python beautifulsoup4 模块,7000字博客+爬第九工场网](https://dream.blog.csdn.net/article/details/120384794) 35. [都说python是万能的,这次用python看溧阳摄影圈,真不错](https://dream.blog.csdn.net/article/details/120407050) -36. pngimg.com 透明 PNG 图片站采集 +36. [全程干货,用 python 下载某站全部【免抠图片】,图片背景透明,格式PNG](https://dream.blog.csdn.net/article/details/120414397) ### 📙 协程学习 -- GitLab