通过Python、BeautifulSoup爬取Gitee热门开源项目

一、安装

1、通过requests 对响应内容进行处理,requests.get()方法会返回一个Response对象

pip install requests

2、beautifulSoup对网页解析不仅灵活、高效而且非常方便,支持多种解析器

pip install beautifulsoup4

3、pymongo是python操作mongo的工具包

pip install pymongo

4、安装mongo

二、分析网页&源代码

1、确定目标:首先要知道要抓取哪个页面的哪个版块

2、分析目标:确定抓取目标之后要分析URL链接格式以及拼接参数的含义其次还要分析页面源代码确定数据格式

3、编写爬虫代码 并 执行

三、编写代码

# -*- coding: utf-8 -*-
# __author__ : "初一丶" 公众号:程序员共成长
# __time__ : 2018/8/22 18:51
# __file__ : spider_mayun.py
# 导入相关库
import requests
from bs4 import BeautifulSoup
import pymongo

"""
通过分析页面url 查询不同语言的热门信息是有language这个参数决定的
"""
# language = ‘java‘
language = ‘python‘
domain = ‘https://gitee.com‘
uri = ‘/explore/starred?lang=%s‘ % language
url = domain + uri

# 用户代理
user_agent = ‘Mozilla/5.0 (Macintosh;Intel Mac OS X 10_12_6) ‘             ‘AppleWebKit/537.36(KHTML, like Gecko) ‘             ‘Chrome/67.0.3396.99Safari/537.36‘

# 构建header
header = {‘User_Agent‘: user_agent}
# 获取页面源代码
html = requests.get(url, headers=header).text
# 获取Beautiful对象
soup = BeautifulSoup(html)

# 热门类型分类 今日热门 本周热门 data-tab标签来区分当日热门和本周热门
hot_type = [‘today-trending‘, ‘week-trending‘]

# divs = soup.find_all(‘div‘, class_=‘ui tab active‘)
# 创建热门列表
hot_gitee = []
for i in hot_type:
   # 通过热门标签 查询该热门下的数据
   divs = soup.find_all(‘div‘, attrs={‘data-tab‘: i})
   divs = divs[0].select(‘div.row‘)
   for div in divs:
       gitee = {}
       a_content = div.select(‘div.sixteen > h3 > a‘)
       div_content = div.select(‘div.project-desc‘)
       # 项目描述
       script = div_content[0].string
       # title属性
       title = a_content[0][‘title‘]
       arr = title.split(‘/‘)
       # 作者名字
       author_name = arr[0]
       # 项目名字
       project_name = arr[1]
       # 项目url
       href = domain + a_content[0][‘href‘]
       # 进入热门项目子页面
       child_page = requests.get(href, headers=header).text
       child_soup = BeautifulSoup(child_page)
       child_div = child_soup.find(‘div‘, class_=‘ui small secondary pointing menu‘)
       """
           <div class="ui small secondary pointing menu">
               <a class="item active" data-type="http" data-url="https://gitee.com/dlg_center/cms.git">HTTPS</a>
               <a class="item" data-type="ssh" data-url="[email protected]:dlg_center/cms.git">SSH</a>
           </div>
       """
       a_arr = child_div.findAll(‘a‘)
       # git http下载链接
       http_url = a_arr[0][‘data-url‘]
       # git ssh下载链接
       ssh_url = a_arr[1][‘data-url‘]

       gitee[‘project_name‘] = project_name
       gitee[‘author_name‘] = author_name
       gitee[‘href‘] = href
       gitee[‘script‘] = script
       gitee[‘http_url‘] = http_url
       gitee[‘ssh_url‘] = ssh_url
       gitee[‘hot_type‘] = i

       # 连接mongo
       hot_gitee.append(gitee)

print(hot_gitee)

# 链接mongo参数
HOST, PORT, DB, TABLE = ‘127.0.0.1‘, 27017, ‘spider‘, ‘gitee‘
# 创建链接
client = pymongo.MongoClient(host=HOST, port=PORT)
# 选定库
db = client[DB]
tables = db[TABLE]
# 插入mongo库
tables.insert_many(hot_gitee)

四、执行结果

[{
 ‘project_name‘: ‘IncetOps‘,
 ‘author_name‘: ‘staugur‘,
 ‘href‘: ‘https://gitee.com/staugur/IncetOps‘,
 ‘script‘: ‘基于Inception,一个审计、执行、回滚、统计sql的开源系统‘,
 ‘http_url‘: ‘https://gitee.com/staugur/IncetOps.git‘,
 ‘ssh_url‘: ‘[email protected]:staugur/IncetOps.git‘,
 ‘hot_type‘: ‘today-trending‘
}, {
 ‘project_name‘: ‘cms‘,
 ‘author_name‘: ‘dlg_center‘,
 ‘href‘: ‘https://gitee.com/dlg_center/cms‘,
 ‘script‘: None,
 ‘http_url‘: ‘https://gitee.com/dlg_center/cms.git‘,
 ‘ssh_url‘: ‘[email protected]:dlg_center/cms.git‘,
 ‘hot_type‘: ‘today-trending‘
}, {
 ‘project_name‘: ‘WebsiteAccount‘,
 ‘author_name‘: ‘张聪‘,
 ‘href‘: ‘https://gitee.com/crazy_zhangcong/WebsiteAccount‘,
 ‘script‘: ‘各种问答平台账号注册‘,
 ‘http_url‘: ‘https://gitee.com/crazy_zhangcong/WebsiteAccount.git‘,
 ‘ssh_url‘: ‘[email protected]:crazy_zhangcong/WebsiteAccount.git‘,
 ‘hot_type‘: ‘today-trending‘
}, {
 ‘project_name‘: ‘chain‘,
 ‘author_name‘: ‘何全‘,
 ‘href‘: ‘https://gitee.com/hequan2020/chain‘,
 ‘script‘: ‘linux 云主机 管理系统,包含 CMDB,webssh登录、命令执行、异步执行shell/python/yml等。持续更...‘,
 ‘http_url‘: ‘https://gitee.com/hequan2020/chain.git‘,
 ‘ssh_url‘: ‘[email protected]:hequan2020/chain.git‘,
 ‘hot_type‘: ‘today-trending‘
}, {
 ‘project_name‘: ‘Lepus‘,
 ‘author_name‘: ‘茹憶。‘,
 ‘href‘: ‘https://gitee.com/ruzuojun/Lepus‘,
 ‘script‘: ‘简洁、直观、强大的开源企业级数据库监控系统,MySQL/Oracle/MongoDB/Redis一站式监控,让数据库监控更简...‘,
 ‘http_url‘: ‘https://gitee.com/ruzuojun/Lepus.git‘,
 ‘ssh_url‘: ‘[email protected]:ruzuojun/Lepus.git‘,
 ‘hot_type‘: ‘today-trending‘
}, {
 ‘project_name‘: ‘AutoLink‘,
 ‘author_name‘: ‘苦叶子‘,
 ‘href‘: ‘https://gitee.com/lym51/AutoLink‘,
 ‘script‘: ‘AutoLink是一个开源Web IDE自动化测试集成解决方案‘,
 ‘http_url‘: ‘https://gitee.com/lym51/AutoLink.git‘,
 ‘ssh_url‘: ‘[email protected]:lym51/AutoLink.git‘,
 ‘hot_type‘: ‘week-trending‘
}, {
 ‘project_name‘: ‘PornHubBot‘,
 ‘author_name‘: ‘xiyouMc‘,
 ‘href‘: ‘https://gitee.com/xiyouMc/pornhubbot‘,
 ‘script‘: ‘全球最大成人网站PornHub爬虫 (Scrapy、MongoDB) 一天500w的数据‘,
 ‘http_url‘: ‘https://gitee.com/xiyouMc/pornhubbot.git‘,
 ‘ssh_url‘: ‘[email protected]:xiyouMc/pornhubbot.git‘,
 ‘hot_type‘: ‘week-trending‘
}, {
 ‘project_name‘: ‘wph_opc‘,
 ‘author_name‘: ‘万屏汇‘,
 ‘href‘: ‘https://gitee.com/wph_it/wph_opc‘,
 ‘script‘: None,
 ‘http_url‘: ‘https://gitee.com/wph_it/wph_opc.git‘,
 ‘ssh_url‘: ‘[email protected]:wph_it/wph_opc.git‘,
 ‘hot_type‘: ‘week-trending‘
}, {
 ‘project_name‘: ‘WebsiteAccount‘,
 ‘author_name‘: ‘张聪‘,
 ‘href‘: ‘https://gitee.com/crazy_zhangcong/WebsiteAccount‘,
 ‘script‘: ‘各种问答平台账号注册‘,
 ‘http_url‘: ‘https://gitee.com/crazy_zhangcong/WebsiteAccount.git‘,
 ‘ssh_url‘: ‘[email protected]:crazy_zhangcong/WebsiteAccount.git‘,
 ‘hot_type‘: ‘week-trending‘
}, {
 ‘project_name‘: ‘information27‘,
 ‘author_name‘: ‘印妈妈‘,
 ‘href‘: ‘https://gitee.com/itcastyinqiaoyin/information27‘,
 ‘script‘: None,
 ‘http_url‘: ‘https://gitee.com/itcastyinqiaoyin/information27.git‘,
 ‘ssh_url‘: ‘[email protected]:itcastyinqiaoyin/information27.git‘,
 ‘hot_type‘: ‘week-trending‘
}]

 

原文地址:https://www.cnblogs.com/wyl-0120/p/9520307.html

时间: 2024-11-06 03:29:32

通过Python、BeautifulSoup爬取Gitee热门开源项目的相关文章

【Python】爬取IMDBTOP250

在网上看到有人利用python+beautifulsoup爬取豆瓣Top250 试着自己模仿这个做了个爬取IMDB的, 可惜只能爬取到11个. 后来检查了超久, 才发现, soup=BeautifulSoup(contents)这里,内容不完整,只能到11个电影为止. 代码如下: import urllib2 from bs4 import BeautifulSoup mylist=[] def crawl(url): headers={'User-Agent':'Mozilla/5.0(Win

Python爬虫爬取知乎小结

博客首发至Marcovaldo's blog (http://marcovaldong.github.io/) 最近学习了一点网络爬虫,并实现了使用python来爬取知乎的一些功能,这里做一个小的总结.网络爬虫是指通过一定的规则自动的从网上抓取一些信息的程序或脚本.我们知道机器学习和数据挖掘等都是从大量的数据出发,找到一些有价值有规律的东西,而爬虫则可以帮助我们解决获取数据难的问题,因此网络爬虫是我们应该掌握的一个技巧. python有很多开源工具包供我们使用,我这里使用了requests.Be

Python爬虫爬取博客园并保存

Python爬虫爬取博客园并保存        爬取博客园指定用户的文章修饰后全部保存到本地 首先定义爬取的模块文件: crawlers_main.py 执行入口 url_manager.py url管理器 download_manager.py 下载模块 parser_manager.py html解析器(解析html需要利用的内容) output_manager.py 输出html网页全部内容文件(包括css,png,js等) crawlers_main.py 执行入口 1 # coding

用Python爬虫爬取广州大学教务系统的成绩(内网访问)

用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code] 在{}之前的部分就是"选择器"."选择器"指明了{}中的"样式"的作用对象,也就是"样式"作用于网页中的哪些元素.可参考:http://www.w3school.com.cn/cssref/css_selectors.asph

python爬虫爬取QQ说说并且生成词云图,回忆满满!

Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务.它的语法非常简捷和清晰,与其它大多数程序设计语言不一样,它使用缩进来定义语句. Python支持命令式程序设计.面向对象程序设计.函数式编程.面向切面编程.泛型编程多种编程范式.与Scheme.Ruby.Perl.Tcl等动态语言一样,Python具备垃圾回收

python之爬取网页数据总结(一)

今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests    Beautifulsoup4   lxml  三个插件. 因为配置了环境变量,可以cmd命令直接安装.假如电脑上有两个版本的python,建议进入到目录安装. 安装的命令为 pip install requests(Beautifulsoup4   /lxml  ) 三条分别执行. 安装结束,可以尝试网上一些简单的例子,明白了解 Beautifulso

爬取微博热门话题

1 介绍 本文主要介绍爬取微博热门话题及话题下的微博.这是我毕业设计的数据来源,在这里先记录一下进展. 我买的阿里云服务器,[轻量应用服务器]预装宝塔Linux面板--三个月¥28.5.配置如下: 用起来还是很方便的,宝塔面板可视化文件上传下载,搭建web网站简便,可以定时爬虫程序.在阿里云服务器进行运行爬虫代码并连接到mysql数据库,运行环境如下: 类型 版本 服务器 CentOS Linux 7.4.1708 (Core) web服务器 Apache 2.4 数据库 mysql5.7 PY

python爬虫爬取微博评论案例详解

这篇文章主要介绍了python爬虫爬取微博评论,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 数据格式:{"name":评论人姓名,"comment_time":评论时间,"comment_info":评论内容,"comment_url":评论人的主页} 以上就是我们需要的信息. 具体操作流程: 我们首相将主页获取完成以后,我们就会发现,其中 的内容带有相

python爬虫爬取csdn博客专家所有博客内容

python爬虫爬取csdn博客专家所有博客内容: 全部过程采取自动识别与抓取,抓取结果是将一个博主的所有 文章存放在以其名字命名的文件内,代码如下 结果如下: 版权声明:本文为博主原创文章,未经博主允许不得转载.