0

    我用多线程爬了5000多部最新电影下载链接

    2023.05.03 | admin | 198次围观

    本文转载自公众号「Python进击者」,详情可以扫描下方二维码,关注该公众号,获取更多好文推荐。



    前言

    最近买了个1T的三星固态硬盘,空间很大,总想存点什么进去。于是发现了阳光电影网站,里面电影巨多。

    话不多说,先把里面的电影下载链接全部弄下来,然后一波下载。

    开整

    一看这种网站,应该不会有什么反爬措施,按照正常套路,先把跳转进去的链接全部弄出来。

    bs = BeautifulSoup(html, "html.parser")
    b = bs.findAll(class_="co_content8")
    b = b[0].findAll(class_="ulink")

    拿到链接之后,接下来就是继续访问这些链接,然后拿到电影的下载链接。

    bs1 = BeautifulSoup(html1, "html.parser")
    b1 = bs1.find("tbody").find_next("td").find_next("a")
    download_url = b1.get("href")

    获取电影的下载链接的核心代码差不多就是这些。

    但是这里还是有很多的小细节,例如我们需要拿到电影的总页数,其次这么多的页面,一个线程不知道要跑到什么时候,所以我们首先先拿到总页码网站片子如何获取连接,然后用多线程来进行任务的分配。

    总页数其实我们用re正则来获取是最省时的。

    def get_total_page(url):
        r = requests.get(url=url,headers=headers)
        r.encoding = 'gb2312'
        pattern = re.compile(r'(?<=页/)\d+')
        t = pattern.findall(r.text)
        return int(t[0])

    上面就是拿到总页数的代码。拿到页码后,我们就可以在url后面拼接,得到下一页的列表页面。

    拿到了总页数,其实我们的任务就快完成了网站片子如何获取连接,当然我们想要把爬取的内容存取到csv,也可以写个函数来存取

    def wirte_into_csv(name,down_url):
        f = open('最新电影.csv''a+', encoding='utf-8')
        csv_writer = csv.writer(f)
        csv_writer.writerow([name,down_url])
        f.close()

    最后,我们开启4个进程来下载链接。

     total_page = get_total_page("https://www.ygdy8.com/html/gndy/oumei/list_7_1.html")
        total_page = int(total_page/25+1)
        end = int(total_page/4)
        try:
            _thread.start_new_thread(run, (1, end))
            _thread.start_new_thread(run, (end+1, end*2))
            _thread.start_new_thread(run, (end*2 + 1, end * 3))
            _thread.start_new_thread(run, (end*3 + 1, end * 4))
        except:
            print("Error: 无法启动线程")

        while(1):
            pass

    最后,我们开始线程跑起来。

    上面我只是给大家简单的梳理一下思路,如果你有没看懂的地方,可以私信我。

    我建议大家去看完整源码,里面每一行我都对其进行了详细的解说。

    获取方式:

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论