吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4107|回复: 22
收起左侧

[Python 转载] 【爬虫】找了一个福利站练手___新手上路

  [复制链接]
lishunwei 发表于 2020-3-17 11:04
代码不足和改进的地方大家可以提出来哈
因为正则表达式瓶颈卡了一天哈哈哈,经过多次尝试还是ok了,完成了第一个用自己思路写的爬虫。
话不多说上代码:(注释可能不完美,全是自己的语言希望理解哈哈哈)
[Python] 纯文本查看 复制代码
import requests
import re
from bs4 import BeautifulSoup
import os#导入所需要的库


url='http://www.win4000.com/zt/xinggan.html'

#从url提取每个系列对应的链接
def GetHtml(url):
    try:
        r=requests.get(url)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        txt = r.text
        accessUrl(txt)#将返回的网页信息传入accessUrl函数
    except :
        print('访问页面出错!')

#提取每个系列对应的网页链接
def accessUrl(txt):
    soup = BeautifulSoup(txt,'html.parser')
    tag_ul=soup.find_all('ul')
    url_list=re.findall('http://www.win4000.com/wallpaper_detail_[\d]*.html',str(tag_ul))
    browse_url(url_list)#将提取的链接以列表形式递给browse_url函数

#循环每个链接
def browse_url(url_list):
    for every_list in url_list:
        solve_url(every_list)将循环的每个链接递给solve_url函数

def solve_url(url_alone):
    url_alone_1=url_alone.split('_')                #
    url_alone_last=url_alone_1[-1]                  #
    url_alone_num=url_alone_last.split('.')[-2]     # 从链接提取相关信息为后面组成链接实现翻页做铺垫      
    # print(url_alone_num)
    try:    
        for i  in range(0,15):#实现翻页,并保存每页的图片,有的系列图片是翻一次页数字加二有的是加1,这里就写0-15,
                         #                   可能会出现一个额系列没爬完的情况
            if i == 0:#因为第一页的链接与后面的链接相比少了_数字部分,所以分开处理
                get_photo_url(url_alone)#将第一页的链接递给get_photo_url函数处理
            else:
                url_alone_compose='http://www.win4000.com/wallpaper_detail_'+url_alone_num+'_'+str(i)+'.html'
                # print(url_alone_compose)
                get_photo_url(url_alone_compose)#将重新组合的链接递给 get_photo_url函数处理
    except:
        print('图片页面不存在')


#这个函数从网页提取图片所对应的链接
def get_photo_url(url_photo):
    try:
        r=requests.get(url_photo)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        soup = BeautifulSoup(r.text,'html.parser')
        tag=soup.find(class_="pic-large")
        url_photo=tag['src']
        #print(url_photo)
        holdphoto(url_photo)#将提取的图片对应的链接交给holdphoto(url_photo)函数进行保存
    except:
         print('获取图片链接失败')
#图片保存函数
def holdphoto(url_photo):
    root="C:/Users/l1768/Desktop/福利图/"#图片要储存的文件夹
    name=url_photo.split('/')[-1]#提取每个图片的名字
    path=root+name#组成图片路径
    try:
        if not os.path.exists(root):#判断文件夹是否存在,不存在则创建
            os.mkdir(root)
        if not os.path.exists(path):#判断图片是否已经存在,不存在则保存
            r=requests.get(url_photo)
            with open(path,"wb") as f:
                f.write(r.content)
                f.close()
                print(name+"保存成功")
        else:
            print("文件已存在")
    except:
        print("图片爬取失败")

if __name__ == "__main__":
    GetHtml(url)

效果图:

效果图:

免费评分

参与人数 4吾爱币 +7 热心值 +4 收起 理由
yjn866y + 1 + 1 我很赞同!
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
jerome970520 + 1 + 1 你这好像是流水线式代码,建议还是看下return,
DaRuiDd + 1 厉害!

查看全部评分

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

Simonl 发表于 2020-3-17 15:12
我也随便爬了一下,虽然也有很多不足,但是代码量没有楼主那么多呢,是不是有点臃肿?
[Asm] 纯文本查看 复制代码
import requests,os
from  bs4 import  BeautifulSoup
pt='C:/Users/Administrator/Desktop/图片/'
p=os.path.exists(pt)
if not p:
    os.makedirs(pt)
else:
    print('存在,跳过。。。')
    pass
t=0
for j in range(5):      #有五页,循环5遍把每一页都下下来
    a=requests.get('http://www.win4000.com/zt/rili_%s.html'%j)  #找出规律,每一页就变最后以恶数字
    b=BeautifulSoup(a.text,'lxml')      #解析每一页的数据
    c=b.find_all('ul',class_='clearfix')    #最小父级
    d=c[1].find_all('li')                   #第二个正好是我们找的数据所以用[1]
    for i in d:                             #循环每一个‘li’标签,
        t+=1
        f=i.find('a')['href']               #提取li标签种a标签里面href的属性
        a1=requests.get(f)                  #继续代入解析网页
        b1=BeautifulSoup(a1.text,'lxml')
        c1=b1.find('div',class_='pic-meinv')
        e1=c1.find('img')['src']            #得到图片链接地址
        h=requests.get(e1).content          #转成二进制
        with open(pt+e1[-10:],'wb')as g:    #把创建的目录加图片倒数10位作为名称,已二进制写入
            g.write(h)                      #写入数据
            print(e1[-10:],'下载完成')
shenqb 发表于 2020-3-17 11:17
祥子吧 发表于 2020-3-17 11:26
LGG.1024 发表于 2020-3-17 11:30
厉害,谢谢楼主
非酋的春天 发表于 2020-3-17 11:32
好好好好是真的好
indian806 发表于 2020-3-17 11:39
果然PLMM给我码农很大的动力呀
vagrantear 发表于 2020-3-17 11:50
又到了最喜欢的收藏福利站爬虫环节
pshendelzare 发表于 2020-3-17 12:30
666,加油!!!
qtjinx 发表于 2020-3-17 12:32
楼主厉害了,继续加油。
Dedsec11 发表于 2020-3-17 12:50
同刚学python,先把代码收藏下来慢慢对着学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-17 02:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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