python 批量下载 代码_60行代码GitHub项目多线程批量下载爬虫

输入关键词及页数,然后开启多线程下载,保存到代码目录下的gitdown,文件命名为项目名

# -*- coding: utf-8 -*-

"""

-------------------------------------------------

@ Author :Lan

@ blog :www.lanol.cn

@ Date : 2020/6/24

@ Description:github搜索关键词批量下载

-------------------------------------------------

"""

import os

import threading

from parsel import Selector

from requests import get

# 基础URL,因为后面有很多重复的,所以到时候就直接拼接

baseurl = 'https://github.com'

# 请求头,用来反反爬

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ApplewebKit/537.36 (KHtml, like Gecko) Chrome/83.0.4103.116 Safari/537.36',

}

# 获取项目链接

def get_url(p, q):

# 拼接URL,这里是搜索的URL

# p是页码,q是关键词

url = f'{baseurl}/search?p={p}&q={q}&type=Repositories'

# 获取搜索结果的html源码,并保存为text给response

response = get(url=url, headers=headers).text

# 将response转成可以进行Xpath的东西

response = Selector(response)

# 列表生成式:因为url有很多个,所以直接这样子就可以自动加到一个列表

result_urls = [neal for neal in

response.xpath("//div[@class='f4 text-normal']/a[@class='v-align-middle']/@href").extract()]

# 返回结果URL

return result_urls

# 开启下载

def down(url, name):

# 判断文件夹是否存在,如果不存在则创建

if not os.path.exists('gitdown'):

os.makedirs('gitdown')

# 输出目前进度

print(f'正在下载{name}')

# 打开这个文件,为写入字节(wb)的方式

with open(f'gitdown/{name[:10]}.zip', 'wb') as f:

# 写入获取到的content

f.write(get(url=url, headers=headers).content)

# 输出目前进度

print(f'下载{name}结束')

# 获取下载链接,并多线程下载

def get_downurl(urls):

# 因为GitHub有一个规律就是下载链接都是项目名然后放到https://github.com/{项目名}/archive/master.zip,然后就传给下载的def开启线程下载

for index, i in enumerate(urls):

i = threading.Thread(target=down, args=(f'{baseurl}/{i}/archive/master.zip', i.replace('/', '-')[1:]))

i.start()

if __name__ == '__main__':

# 获取用户需求数据

keyword = input("请输入要下载的关键词:\n>>>")

nums = input("请输入要下载的页数:\n>>>")

# 循环调用获取url

for i in range(int(nums)):

# 传入关键字和页码

urls = get_url(i, keyword)

get_downurl(urls)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值