吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4278|回复: 18
上一主题 下一主题
收起左侧

[讨论] 优美图库 美女高清 bs4 练习

[复制链接]
跳转到指定楼层
楼主
lihu5841314 发表于 2021-6-14 21:11 回帖奖励
本帖最后由 lihu5841314 于 2021-6-14 22:22 编辑

[Asm] 纯文本查看 复制代码
import  requests
from multiprocessing.dummy import Pool
from urllib  import parse
from bs4 import BeautifulSoup




headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        "Referer": "https://www.umei.net/"
    }
#1.获取url响应
def response(url):
    resp = requests.get(url=url,headers=headers)
    resp.encoding = resp.apparent_encoding
    # print("正在传送response")
    return resp

#2.实例化BeautifulSoup 解析出图片的详情页url地址
def Soup(resp):
    soup = BeautifulSoup(resp.text,"lxml")  #容易忘记填写"lxml"或者"html.parse"
    alist = soup.find("div",attrs={"class":"TypeList"}).find_all('a',attrs={"class":"TypeBigPics"}) #获取页面的所有a标签
    for  a in alist:
         a_href = a.get("href")     #发现网址不全 需要补全
         a_url =parse.urljoin(html_url,a_href)   #urljoin补全网址挺好用的
         img_title = a.text
         # print(a_url)  #有了详情页网址  当然发送请求拿到详情页响应数据
         a_resp = response(a_url)
         a_soup = BeautifulSoup(a_resp.text,"lxml")
         img_url = a_soup.find("div",attrs={"class":"ImageBody"}).find("img").get("src")  #findall是列表 不能直接get取
         img_save(img_title,img_url,1)#第一页持久化存储
         # 拿到图片url  发现下面有页表是套图 找到规律就是第一个图片url后面加页码
         # https://www.umei.net/meinvtupian/meinvxiezhen/234305_7.htm  试试第一页把7改成1直接404  想法就是把第二图之后url和第一页url放到一个列表中
         # for i in  range(20):
         #    img2_url = parse.urljoin(img_url,f'_{i}.htm')  #直接粗暴的把页面弄多些  用try except  的方式去除无用的url  测试是可行的  但是不美观
         # 发现图片下面连接有尾页标签我直接取到尾页url  把页码取出来不就有总页数了
         page = [a for a in a_soup.find_all("a") if a.text == "尾页"][0]  # 用推导式找到尾页a标签
         page1 = str(page).split("_")[0].split("/")[-1]
         page2 = str(page).split("_")[1].split(".")[
             0]  # 要去除页码  分析网页用_和. 分割  注意split分割的str类型  我以为page取出列表就是str类型 我还是太天真了
         page2 = int(page2)  # 转换成数字 好递加
         for i in range(2, page2 + 1):
             next_img_url = "https://www.umei.net/meinvtupian/meinvxiezhen/" + page1 + f'_{i}.htm'
             resp_next = response(next_img_url)
             soup_next = BeautifulSoup(resp_next.text,"lxml")
             next_img_down_url = soup_next.find("div", attrs={"class": "ImageBody"}).find("img").get("src")
             # print(next_img_down_url)
             img_save(img_title,next_img_down_url,i)


def  img_save(title,url,i):
     resp = response(url).content #图片存储是二进制格式
     path = title +str(i) + ".jpg"
     with open(path,"wb")  as  f:
          f.write(resp)
          print(title +str(i),"下载成功")


if __name__ == '__main__':         #一张一张的下载太慢了  简单开个进程池 图片太多开双进程池
    pool = Pool(4)
    urls = []
    resps = []
    html_url = "https://www.umei.net/meinvtupian/"
    urls.append(html_url)
    for g in range(2, 11):  #一共517页  太多了改成10页  只为了练习  开双进程池失败 只有优先让下载用进程池了
        me_url = f'https://www.umei.net/meinvtupian/index_{g}.htm'
        urls.append(me_url)
    for  url  in urls:
         resp = response(url)
         resps.append(resp)
    print("进程池启动")
    data = pool.map(Soup,resps)
    pool.close()
    pool.join()  #今天学习到此结束
上一篇有问题  已修正不知道大家发现没有   
[Asm] 纯文本查看 复制代码
import  requests
from multiprocessing.dummy import Pool
from urllib  import parse
from bs4 import BeautifulSoup




headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
#1.获取url响应
def response(url):
    resp = requests.get(url=url,headers=headers)
    resp.encoding = resp.apparent_encoding
    # print("正在传送response")
    return resp

#2.实例化BeautifulSoup 解析出图片的详情页url地址
def Soup(resp):
    soup = BeautifulSoup(resp.text,"lxml")  #容易忘记填写"lxml"或者"html.parse"
    alist = soup.find("div",attrs={"class":"TypeList"}).find_all('a',attrs={"class":"TypeBigPics"}) #获取页面的所有a标签
    for  a in alist:
         a_href = a.get("href")     #发现网址不全 需要补全
         a_url =parse.urljoin(html_url,a_href)   #urljoin补全网址挺好用的
         img_title = a.text
         # print(a_url)  #有了详情页网址  当然发送请求拿到详情页响应数据
         a_resp = response(a_url)
         a_soup = BeautifulSoup(a_resp.text,"lxml")
         img_url = a_soup.find("div",attrs={"class":"ImageBody"}).find("img").get("src")  #findall是列表 不能直接get取值
         img_save(img_title,img_url,1)#第一页持久化存储
         # print(img_url) #拿到图片url  发现下面有页表是套图 找到规律就是第一个图片url后面加页码
         #https://www.umei.net/meinvtupian/meinvxiezhen/234305_7.htm  试试第一页把7改成1直接404  想法就是把第二图之后url和第一页url放到一个列表中
         # for i in  range(20):
         #    img2_url = parse.urljoin(img_url,f'_{i}.htm')  #直接粗暴的把页面弄多些  用try except  的方式去除无用的url  测试是可行的  但是不美观
         #发现图片下面连接有尾页标签我直接取到尾页url  把页码取出来不就有总页数了
         page = [a for a in a_soup.find_all("a") if a.text=="尾页"][0]  #用推导式找到尾页a标签
         page= str(page).split("_")[1].split(".")[0]  #要去除页码  分析网页用_和. 分割  注意split分割的str类型  我以为page取出列表就是str类型 我还是太天真了
         page = int(page) #转换成数字 好递加
         for  i  in range(2,page+1):
              next_img_url = parse.urljoin(img_url,f'_{i}.htm')
              #print(next_img_url) #第二页之后有了持久化存储
              img_save(img_title,next_img_url,i)

def  img_save(title,url,i):
     resp = response(url).content #图片存储是二进制格式
     path = title +str(i) + ".jpg"
     with open(path,"wb")  as  f:
          f.write(resp)
          print(title +str(i),"下载成功")


if __name__ == '__main__':         #一张一张的下载太慢了  简单开个进程池 图片太多开双进程池
    pool = Pool(4)
    urls = []
    resps = []
    html_url = "https://www.umei.net/meinvtupian/"
    urls.append(html_url)
    for g in range(2, 11):  #一共517页  太多了改成10页  只为了练习  开双进程池失败 只有优先让下载用进程池了 
        me_url = f'https://www.umei.net/meinvtupian/index_{g}.htm'
        urls.append(me_url)
    for  url  in urls:
         resp = response(url)
         resps.append(resp)
    print("进程池启动")
    data = pool.map(Soup,resps)
    pool.close()
    pool.join()  #今天学习到此结束

免费评分

参与人数 1热心值 +1 收起 理由
xzl9552547 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
 楼主| lihu5841314 发表于 2021-6-14 21:11 |楼主
总体来说bs4   和 xpath   各有千秋  
3#
QingYi. 发表于 2021-6-14 22:16
4#
 楼主| lihu5841314 发表于 2021-6-14 22:23 |楼主
QingYi. 发表于 2021-6-14 22:16
拿Regular Expression练手啊

在练  bs4  xpath   正则  css选择器都在练习
5#
bigdawn 发表于 2021-6-14 22:26
找美女高清图来练习还是比较动力点
6#
低吟不作语 发表于 2021-6-14 22:30
造福社会。。
7#
江南云 发表于 2021-6-15 05:38
看到美女图库可以练习,就比较有动力哦!谢谢分享!
8#
Wapj_Wolf 发表于 2021-6-15 07:44
谢谢楼主分享PY源码,学习了……
9#
chenkeai深蓝 发表于 2021-6-15 08:01
动力一下子就上来了
10#
smartzeng 发表于 2021-6-15 08:51
感谢源码分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表