乐愚社区Beta

 编程语言  >  python爬取磁力猫--详细讲解

python爬取磁力猫--详细讲解

聆听彼岸  L2  • 2018-11-06 • 回复 19 • 最后编辑于2018-11-06 23:29 • 只看楼主举报    

前言

看到这个编程板块发的全是资源分享,先吐槽一下,我感觉代码美化功能都成摆设了,其实我觉得那些教程什么的应该放到学习那个板块。然后,这应该是这个板块第一篇讲思路的帖子,之后再说说我写这个程序的原因,其实磁力猫不用爬就很好用了,但是这里讲的是技术,我只是分享经验,如果你想吐槽或者喷我之类的,手机客户端请单击左上角的箭头,Windows请按住右键往下再往右画个近似直角(这个我经常用)好了,废话不多说。


开始

首先,准备工具:
1.电脑
2.python(废话)
3.小白鼠https://www.cilimao.me/(百度也有)
4.requests,bs4,re,pyperclip(这四个是什么就不解释了,最后一个非必须,度娘搜来的,用来复制粘贴)


开始

打开网页,随便搜一个,从地址栏可以发现,一个搜索用的URL,以及一些参数word=搜索内容,page=页数
所以,首先导入requests然后下载这个网页存到test.txt里,看这个网页有没有我们想要的资源,代码:

import requests as req


res = req.get("https://www.cilimao.me/search?word=%E5%A4%8D%E4%BB%87%E8%80%85%E8%81%94%E7%9B%9F&page=1")

with open("test.txt","w") as f:
    f.write(res.text)

然后,报错了,编码问题,因为网页是utf-8的编码,所以更正后代码如下

import requests as req

res = req.get("https://www.cilimao.me/search?word=%E5%A4%8D%E4%BB%87%E8%80%85%E8%81%94%E7%9B%9F&page=1")

with open("test.txt","w",encoding="utf-8") as f:
    f.write(res.text)

之后用notepad++打开可以看到,我们需要的都在,如下图,好像还有链接我没圈,不过没关系,知道就行

确定目标后,就是开干了,回到网页,按f12或哦不,最好直接在资源文字上右键审查元素,
然后可以看到我们要的都在这个<div class="Search__result___2S94i" data-reactid="137">标签里,
接下来,不用说先定义一下函数,一个是取网页,一个是分析网页,直接贴代码顺便讲解

import requests as req
import bs4
import pyperclip as pyp
import re
def get_html(url):
    try:
        res = req.get(url)
        return res
    
    except:
        print("资源获取失败,正在重试,若重试几次都不行,可能是程序失效了!")
        res = get_html(url)
        return res


def data(res):
    urls = []
    soup = bs4.BeautifulSoup(res.text,"html.parser")
    information = soup.find_all("div",class_="Search__result___2S94i")
    i = 0
    for each in information:
       print(str(i) + "." + each.a.text + "\n"+ each.div.text+ "\n")
       urls.append(each.a["href"])
       i = i + 1

第一个取网页,取网页函数get_html(中文数字表示行数)
一,有时候有些网页会有主机不回应的情况,所以用try监视这段代码,看有没有出错(主机不回应),若出错直接跳转去执行except后面的代码
二,下载(取)地址为参数一url的网页
三,返回取到的网页
四,标记出错后执行的代码
五,告诉用户出错了
六,调用自身重新下载网页,也就是说,如果它一直出错那么就会一直重新下载,而当它下载成功时就会相当于回到第二行,然后往下返回下载到的网页,一直返回到调用这个get_html函数的地方
七,这个不解释,其实上一句已经连同这句也解释了,作用也同 三
第二个分析数据
一,定义一个空列表,如果不定义的话,下面加东西的时候会报错,因为这个列表不存在
二,煲汤{:10_256:} 没错,把网页丢到汤里,解析它{:10_301:}
三,在汤里找全部的肉{:10_250:} (找储存着我们要的东西的标签)
四,定义一个整形变量,变量值为0,因为列表的索引从0开始,取链接用,告诉用户这是列表的第几个数据用(这个理解容易,解释貌似不太清楚)
五,使用for循环迭代什么的,我都说我基础差,哈哈,好像是迭代,总之把information就像是一些肉,肉切的时候没切断,现在切断,然后把切断的放到each里,有多少肉就循环多少次{:10_284:}
六,打印一下资源信息
七,把each里我们要的链接放进列表
八,每次循环i就加1,i的作用看上面四

然后习惯

if __name__ == "__main__":
    while 1 == 1:
        main()
        print("Ctrl + C退出!")

这里的while的作用:可以多次搜索

再定义main函数

def main():
    seach = input("请输入你要搜索的内容:")
    res = get_html("https://www.cilimao.me/search?word=" + seach + "&page=1")
    urls = data(res)
    num = int(input("请输入你想要的资源的序号:"))

很容易理解,把你想搜的资源名称放到seach里,然后调用get_html函数,再把下载好的网页对象放进res里,然后放进data函数分析,再把分析完返回的链接列表放进urls,在data分析时会把那个i作为序号打印出来,然后你想要哪个就发哪个,然后main的下半部分

if re.search("baidu",urls[num]) != None:
        pyp.copy(urls[num])
        print("复制完成,请自行去浏览器测试!")

    else:
        res = get_html("https://www.cilimao.me" + urls[num])
        get_mag(res)
        print("复制完成,请自行去浏览器测试!")

if记得要缩进,然后继续如果是百度网盘就往下执行,如果不是也就是磁力链,往else执行,因为还要进另一个网页,所以如上,至于分析网页就只能交给另一个函数执行了,于是又定义一个函数,然后在里面直接把磁力链复制到剪贴板,另一个函数如下

def get_mag(res):
    soup = bs4.BeautifulSoup(res.text,"html.parser")
    mag = soup.find("div",class_="Information__content_information___1e4H7")
    pyp.copy(mag.a["href"])

具体我就不讲了,经过上面的讲解,我相信小白也能看懂这个

结果

利用pyinstaller打包成exe可执行文件,脱离python

完整代码和打包后的程序:

  提示: 游客,如果您要查看本帖隐藏内容请先登录


19条回帖
Walker  管理员   L12  评论于
(2)  回复(3) 1#
Windows请按住右键往下再往右画个近似直角--这个要浏览器装插件才可以哦
聆听彼岸 楼主 :这不是鼠标手势么?好像不用插件吧
发表在2018-11-06 回复
TTTTT :回复 情殇冰:IE、edge都没有默认自带的。
发表在2018-11-07 回复
聆听彼岸 楼主 :回复 TTTTT 那win + x + u
发表在2018-11-07 回复
  
:)
聆听彼岸 楼主  L2  评论于
(1)  回复(1) 2#
补充一下,第三段代码导入模块后有一对“插入代码”的code标签,无视就行
聆听彼岸 楼主 :已修复,请无视此评论。
发表在2018-11-06 回复
  
:)
霜叶红于二月花  L7  评论于
(1)  回复(0) 3#
感觉我手机的另一边是个电脑高手
Trump  L0  评论于
(0)  回复(0) 4#
dd
333  L1  评论于
(0)  回复(0) 5#
666
大牛骚哥  L0  评论于
(0)  回复(3) 6#
楼主,文库工具有没有呐
Zwj :百度文库要啥文件给你下载,我们这边不收钱
发表在2018-11-21 回复
coin :回复 Zwj:大哥,你们那边是哪边
发表在2018-11-21 回复
pekachu :推荐一款,文库原版格式下载的 链接:百度云链接 提取码:otiw 复制这段内容后打开百度网盘手机App,操作更方便哦
发表在2018-11-24 回复
  
:)
MarkMark  L0  评论于
(0)  回复(0) 8#
Mark
Pigs  L0  评论于
(0)  回复(0) 9#
get
比尔盖茨  L0  评论于
(0)  回复(1) 10#
没有收藏吗
聆听彼岸 楼主 :帖子右下角有收藏
发表在2018-11-27 回复
  
:)
雷发烧  L0  评论于
(0)  回复(0) 11#
牛逼
还没注册帐号?快来注册社区帐号,和我们一起嗨起来!
关于本社区

集各类兴趣爱好于一身的轻量化交流社区,在此您可以和他人一起分享交流您觉得有价值的内容,社区鼓励大家发表原创内容,为社区添砖加瓦!

发帖奖励 → 社区版规 → 招聘版主 →
推荐版块
扫描二维码下载社区APP
回到顶部