当前位置:   article > 正文

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

批量下载github开源项目源码上传到csdn

输入关键词及页数,然后开启多线程下载,保存到代码目录下的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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/476009
推荐阅读
相关标签
  

闽ICP备14008679号