通过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="git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com: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': 'git@gitee.com:itcastyinqiaoyin/information27.git',
'hot_type': 'week-trending'
}]

通过Python、BeautifulSoup爬取Gitee热门开源项目的更多相关文章
- [原创]python+beautifulsoup爬取整个网站的仓库列表与仓库详情
from bs4 import BeautifulSoup import requests import os def getdepotdetailcontent(title,url):#爬取每个仓库 ...
- Python使用urllib,urllib3,requests库+beautifulsoup爬取网页
Python使用urllib/urllib3/requests库+beautifulsoup爬取网页 urllib urllib3 requests 笔者在爬取时遇到的问题 1.结果不全 2.'抓取失 ...
- PYTHON 爬虫笔记九:利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集(实战项目二)
利用Ajax+正则表达式+BeautifulSoup爬取今日头条街拍图集 目标站点分析 今日头条这类的网站制作,从数据形式,CSS样式都是通过数据接口的样式来决定的,所以它的抓取方法和其他网页的抓取方 ...
- python大规模爬取京东
python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...
- Python+Selenium爬取动态加载页面(2)
注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- 用Python爬虫爬取广州大学教务系统的成绩(内网访问)
用Python爬虫爬取广州大学教务系统的成绩(内网访问) 在进行爬取前,首先要了解: 1.什么是CSS选择器? 每一条css样式定义由两部分组成,形式如下: [code] 选择器{样式} [/code ...
- python之爬取网页数据总结(一)
今天尝试使用python,爬取网页数据.因为python是新安装好的,所以要正常运行爬取数据的代码需要提前安装插件.分别为requests Beautifulsoup4 lxml 三个插件 ...
- 大神:python怎么爬取js的页面
大神:python怎么爬取js的页面 可以试试抓包看看它请求了哪些东西, 很多时候可以绕过网页直接请求后面的API 实在不行就上 selenium (selenium大法好) selenium和pha ...
随机推荐
- 《About Face 3:交互设计精髓》读书笔记(一)
第一章 目标导向设计 当今数字产品的创造过程 市场营销人员对于产品设计过程的贡献,通常局限于需求列表这些需求同用户的实际需要与期望无关,主要在于追赶竞争对手,按照任务清单管理IT资源,以及基于市场调查 ...
- 爬虫之正则和xpath
一.正解解析 常用正则表达式回顾: 单字符: . : 除换行以外所有字符 [] :[aoe] [a-w] 匹配集合中任意一个字符 \d :数字 [-] \D : 非数字 \w :数字.字母.下划线.中 ...
- C++输出
setiosflags 意思就是设置输入输出的标志iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移 ...
- Swagger2教程
Swagger2教程 作用:编写和维护接口文档. 一.Swagger2 + SpringBoot集成 1.依赖 <!--依赖管理 --> <dependencies> < ...
- Git提交代码(要有GitHub账号)
分享一下Git提交模式代码(只是提交到GitHub仓库而已,没有其他的操作) 这个的前提是你已经安装了Node.js.Git 下面来看: 1. cd进入目录 2. 把当前目录变成git可以管理的仓 ...
- Python-杂物
1,and和or 在一个bool and a or b语句中,当bool条件为真时,结果是a:当bool条件为假时,结果是b. a = "heaven" b = "hel ...
- HDU-1423 最长公共上升子序列(LCIS)
问题描述: 给定两个字符串x, y, 求它们公共子序列s, 满足si < sj ( 0 <= i < j < |s|).要求S的长度是所有条件序列中长度最长的. 做过最长公共子 ...
- Zathura: 轻巧好用的 PDF 查看器]
[Zathura: 轻巧好用的 PDF 查看器](https://linuxtoy.org/archives/zathura.html) 这个文件很轻巧,且支持VIM方式的 快捷键
- 异步使用委托delegate --- BeginInvoke和EndInvoke方法
当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...
- Java面经
转载:[Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等) 原文:http://www.cnblogs.com/wang-meng/p/5 ...