Skip to content

Commit

Permalink
feat: vitepress page done
Browse files Browse the repository at this point in the history
  • Loading branch information
NanmiCoder committed Aug 28, 2024
1 parent 58cafbc commit 6ef7a75
Show file tree
Hide file tree
Showing 54 changed files with 2,069 additions and 45 deletions.
64 changes: 64 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# 构建 VitePress 站点并将其部署到 GitHub Pages 的示例工作流程
#
name: Deploy VitePress site to Pages

on:
# 在针对 `main` 分支的推送上运行。如果你
# 使用 `master` 分支作为默认分支,请将其更改为 `master`
push:
branches: [main]

# 允许你从 Actions 选项卡手动运行此工作流程
workflow_dispatch:

# 设置 GITHUB_TOKEN 的权限,以允许部署到 GitHub Pages
permissions:
contents: read
pages: write
id-token: write

# 只允许同时进行一次部署,跳过正在运行和最新队列之间的运行队列
# 但是,不要取消正在进行的运行,因为我们希望允许这些生产部署完成
concurrency:
group: pages
cancel-in-progress: false

jobs:
# 构建工作
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # 如果未启用 lastUpdated,则不需要
# - uses: pnpm/action-setup@v3 # 如果使用 pnpm,请取消注释
# - uses: oven-sh/setup-bun@v1 # 如果使用 Bun,请取消注释
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm # 或 pnpm / yarn
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Install dependencies
run: npm ci # 或 pnpm install / yarn install / bun install
- name: Build with VitePress
run: npm run docs:build # 或 pnpm docs:build / yarn docs:build / bun run docs:build
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs/.vitepress/dist

# 部署工作
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
needs: build
runs-on: ubuntu-latest
name: Deploy
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -161,3 +161,5 @@ cython_debug/

.idea

node_modules
docs/.vitepress/cache
51 changes: 51 additions & 0 deletions docs/.vitepress/config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
import {defineConfig} from 'vitepress'

// https://vitepress.dev/reference/site-config
export default defineConfig({
title: "程序员阿江-Relakkes的爬虫教程",
description: "程序员阿江-Relakkes的爬虫教程",
lastUpdated: true,
themeConfig: {
search: {
provider: 'local'
},
// https://vitepress.dev/reference/default-theme-config
nav: [
{text: '首页', link: '/'},
{text: 'B站主页', link: 'https://space.bilibili.com/434377496'},
{text: '联系作者', link: 'https://github.com/NanmiCoder'},
],

sidebar: [
{
text: 'Python爬虫入门',
collapsed: false,
items: [
{text: '01_为什么要写这个爬虫教程', link: '/爬虫入门/01_为什么要写这个爬虫教程'},
{text: '02_个人学会爬虫能赚钱吗', link: '/爬虫入门/02_个人学会爬虫能赚钱吗'},
{text: '03_网络爬虫到底是什么', link: '/爬虫入门/03_网络爬虫到底是什么'},
{text: '04_爬虫的基本工作原理', link: '/爬虫入门/04_爬虫的基本工作原理'},
{text: '05_常用的抓包工具有那些', link: '/爬虫入门/05_常用的抓包工具有那些'},
{
text: '06_Python写爬虫的优势',
link: '/爬虫入门/06_为什么说用Python写爬虫有天生优势'
},
{text: '07_Python常见的网络请求库', link: '/爬虫入门/07_Python常见的网络请求库'},
{text: '08_入门实战1_静态网页数据提取', link: '/爬虫入门/08_爬虫入门实战1_静态网页数据提取'},
{text: '09_入门实战2_动态数据提取', link: '/爬虫入门/09_爬虫入门实战2_动态数据提取'},
{text: '10_入门实战3_数据存储实现', link: '/爬虫入门/10_爬虫入门实战3_数据存储实现'},
{text: '11_入门实战4_高效率的爬虫实现', link: '/爬虫入门/11_爬虫入门实战4_高效率的爬虫实现'},
{
text: '12_入门实战5_编写易于维护的代码',
link: '/爬虫入门/12_爬虫入门实战5_编写易于维护的爬虫代码'
}
]
}
],

socialLinks: [
{icon: 'github', link: 'https://github.com/NanmiCoder/CrawlerTutorial'}
]
},

})
9 changes: 9 additions & 0 deletions docs/.vitepress/theme/custom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
/* .vitepress/theme/custom.css */
/**
* Component: Sidebar
* -------------------------------------------------------------------------- */

:root {
--vp-sidebar-width: 285px;
--vp-sidebar-bg-color: var(--vp-c-bg-alt);
}
5 changes: 5 additions & 0 deletions docs/.vitepress/theme/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// .vitepress/theme/index.js
import DefaultTheme from 'vitepress/theme'
import './custom.css'

export default DefaultTheme
21 changes: 10 additions & 11 deletions README.md → docs/index.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
## 关于作者
# 关于作者
大家好,我是程序员阿江-Relakkes,近期我会给大家出一些爬虫方面的教程,爬虫入门、进阶、高级都有,有需要的朋友,star仓库并持续关注本仓库的更新。

### 基本信息
- [自媒体爬虫MediaCrawler作者](https://github.com/NanmiCoder/MediaCrawler)
- [Github万星开源自媒体爬虫仓库MediaCrawler作者](https://github.com/NanmiCoder/MediaCrawler)
- 全栈程序员,熟悉Python、Golang、JavaScript,工作中主要用Golang。
- 曾经主导并参与过百万级爬虫采集系统架构设计与编码
- 爬虫是一种技术兴趣爱好,参与爬虫有一种对抗的感觉,越难越兴奋。
Expand All @@ -14,20 +13,20 @@
- [x] [03_网络爬虫到底是什么](爬虫入门/03_网络爬虫到底是什么.md)
- [x] [04_爬虫的基本工作原理](爬虫入门/04_爬虫的基本工作原理.md)
- [x] [05_常用的抓包工具有那些](爬虫入门/05_常用的抓包工具有那些.md)
- [x] [06_为什么说用Python写爬虫有天生优势](爬虫入门/06_为什么说用Python写爬虫有天生优势.md)
- [x] [06_Python写爬虫的优势](爬虫入门/06_为什么说用Python写爬虫有天生优势.md)
- [x] [07_Python常见的网络请求库](爬虫入门/07_Python常见的网络请求库.md)
- [x] [08_爬虫入门实战1_静态网页数据提取](爬虫入门/08_爬虫入门实战1_静态网页数据提取.md)
- [x] [09_爬虫入门实战2_动态数据提取](爬虫入门/09_爬虫入门实战2_动态数据提取.md)
- [x] [10_爬虫入门实战3_数据存储实现](爬虫入门/10_爬虫入门实战3_数据存储实现.md)
- [ ] [11_爬虫入门实战4_高效率的爬虫实现](爬虫入门/11_爬虫入门实战4_高效率的爬虫实现.md)
- [ ] [12_爬虫入门实战5_编写易于维护的爬虫代码](爬虫入门/12_爬虫入门实战5_编写易于维护的爬虫代码.md)
- [x] [08_入门实战1_静态网页数据提取](爬虫入门/08_爬虫入门实战1_静态网页数据提取.md)
- [x] [09_入门实战2_动态数据提取](爬虫入门/09_爬虫入门实战2_动态数据提取.md)
- [x] [10_入门实战3_数据存储实现](爬虫入门/10_爬虫入门实战3_数据存储实现.md)
- [ ] [11_入门实战4_高效率的爬虫实现](爬虫入门/11_爬虫入门实战4_高效率的爬虫实现.md)
- [ ] [12_入门实战5_编写易于维护的爬虫代码](爬虫入门/12_爬虫入门实战5_编写易于维护的爬虫代码.md)

## 爬虫进阶
## 高级爬虫

## 爬虫交流群
可以加作者wx拉进群: yzglan,备注来自github爬虫教程.

## 爬虫进阶
## 高级爬虫

## 免责声明
>本仓库的所有内容仅供学习和参考之用,禁止用于商业用途。任何人或组织不得将本仓库的内容用于非法用途或侵犯他人合法权益。本仓库所涉及的爬虫技术仅用于学习和研究,不得用于对其他平台进行大规模爬虫或其他非法行为。对于因使用本仓库内容而引起的任何法律责任,本仓库不承担任何责任。使用本仓库的内容即表示您同意本免责声明的所有条款和条件。
Expand Down
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
File renamed without changes
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## 为什么写这个爬虫教程?
# 为什么写这个爬虫教程?
- 满足需求:我的[自媒体平台爬虫](https://github.com/NanmiCoder/MediaCrawler)爆火了之后,越来越多人私信我都是问想要学习爬虫时,我意识到了有很多人对这个爬虫领域感兴趣,但却不知道从何入手。因此决定撰写这个爬虫教程。

- 分享经验:首先我这个人虽然技术一般,但是真的很喜欢分享,平时工作中我学到了什么新知识都迫不及待的想要跟身边同事去分享,所以既然大家有需要,那么我会分享自己在爬虫领域的一些经验知识和见解。
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## 个人学会爬虫能赚钱吗?
# 个人学会爬虫能赚钱吗?

**先说结论**
>肯定可以赚钱,关键在于挣得多还是少。掌握任何一门技术,都有赚钱的机会,因为技术需求一直存在。
Expand All @@ -13,7 +13,7 @@

爬虫挣钱的分类我基于我个人的经验总结了一下,大致分为三类,`兼职小活``长期雇佣关系``专职爬虫`,下面对这三类都做一个简单介绍

### 1、兼职小活
## 1、兼职小活
我们经常能在各种卖爬虫课直播间看到一些主播晒关于接单成交截图之类,其实这些截图我认为有真有假,可能大部分都是真的,因为市场是一个供需关系来的,有需求自然就有提供方,爬虫这个也不例外。

在现如今这个数据为王的时代。做事儿都需要有强有力的数据做支撑然后去做决策,而不是盲目的去做。我打个比方:
Expand All @@ -24,7 +24,7 @@

> 这类活我们可以把它统称为:兼职小活,特点:`客单价低``大多是一次性需求``花的时间相对少`
### 2、长期雇佣关系
## 2、长期雇佣关系
长期雇佣关系这个从字面意思就比较好理解了,基于某一类固定需求,长期给需求方提供服务,这里我举一个我之前兼职遇到的客户吧

她是一个女生,她们公式是xxx相关的业务,她接到了领导的一个需求,需要定期出一份她们公司所在省份的xxx业务数据。
Expand All @@ -39,7 +39,7 @@

> 这类活我们可以把它统称为:长期雇佣关系, 特点:`客单价有高有低``大多为数据导出清洗需求``回购 or 复购`
### 3、专职爬虫
## 3、专职爬虫
这一类就比较直观了,就是找一个`爬虫工程师`的工作,工作内容一般为:数据采集、数据清洗、爬虫系统设计与架构。

薪水的话拿一线城市举个例子吧,初级的话大概在8-14k 中高级 15 - 30k,当然这是一个参考区间,有的可能更高,有的可能稍微少点。
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
## 网络爬虫到底是什么?
# 网络爬虫到底是什么?
![](../static/images/100000002.png)

### 1、看看维基百科的定义
## 1、看看维基百科的定义
> 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器人。其目的一般为编纂网络索引。<br>
> 网络搜索引擎等站点通过爬虫软件更新自身的网站内容或其对其他网站的索引。网络爬虫可以将自己所访问的页面保存下来,以便搜索引擎事后生成索引供用户搜索。<br>
> 爬虫访问网站的过程会消耗目标系统资源。不少网络系统并不默许爬虫工作。因此在访问大量页面时,爬虫需要考虑到规划、负载,还需要讲“礼貌”。 不愿意被爬虫访问、被爬虫主人知晓的公开站点可以使用robots.txt文件之类的方法避免访问。这个文件可以要求机器人只对网站的一部分进行索引,或完全不作处理。<br>
> 互联网上的页面极多,即使是最大的爬虫系统也无法做出完整的索引。因此在公元2000年之前的万维网出现初期,搜索引擎经常找不到多少相关结果。现在的搜索引擎在这方面已经进步很多,能够即刻给出高素质结果。<br>
> 爬虫还可以验证超链接和HTML代码,用于网络抓取

### 2、Google和百度搜索引擎是如何工作的呢?
## 2、Google和百度搜索引擎是如何工作的呢?
- 首先,网络爬虫持续抓取网站内容,将其存储在搜索引擎的数据库中。
- 紧接着,索引程序对数据库中的网页进行整理,创建倒排索引。
- 最后,当用户输入查询关键词时,搜索程序会在索引中查找相关内容,并通过排序算法(例如Pagerank)将最相关的结果展现给用户。
Expand All @@ -22,22 +22,22 @@

为了解决这一问题,搜索引擎和网站之间形成了一种默契——robots.txt协议。网站通过这个文件指明哪些内容可以被爬虫抓取,哪些不可以;同时,搜索引擎在访问网站时会通过User-Agent标识自己的身份(如Googlebot、Baiduspider),以此保持双方的和平共处和互利共赢。

### 3、爬虫Crawler的职责
#### 抓取页面(Fetching)
## 3、爬虫Crawler的职责
### 抓取页面(Fetching)
网络爬虫会按照一定的规则和算法,访问网站上的页面并下载页面内容。这个过程需要考虑页面的深度、频率、并发请求数量等因素,以确保高效地获取数据。

#### 解析页面(Parsing)
### 解析页面(Parsing)
爬虫需要解析下载的页面内容,提取其中的文本、链接、图像等信息。通过解析页面,爬虫可以识别页面结构、内容特征以及与其他页面的关联。

#### 处理链接(Link Handling)
### 处理链接(Link Handling)
爬虫在解析页面时会提取页面中的链接,然后根据一定的策略处理这些链接。这包括去重、筛选、调度等操作,以确保爬虫系统能够高效地覆盖目标网站的内容。

#### 存储数据(Storing)
### 存储数据(Storing)
爬虫需要将抓取到的数据进行存储,通常存储在数据库或索引中。这样可以为后续的数据处理、索引建立和搜索提供支持。

#### 遵守规则(Respect Robots.txt)
### 遵守规则(Respect Robots.txt)
:爬虫需要遵守网站所有者制定的规则,比如robots.txt文件中定义的爬取限制。爬虫需要尊重网站的爬取策略,以避免对目标网站造成不必要的干扰。


### 4、总结
## 4、总结
网络爬虫在信息检索系统中扮演着数据搜集和处理的关键角色。通过抓取、解析、处理链接、存储数据、更新索引等一系列操作,网络爬虫为搜索引擎提供了高效的数据支持,帮助用户快速准确地获取所需信息。
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
### 1. 常用的网络请求库
# 1. 常用的网络请求库

在Python中,进行网络请求的库主要分为同步和异步两大类。

Expand All @@ -10,7 +10,7 @@
- `aiohttp`: 支持异步请求的库,使用`asyncio`进行网络通信,适合处理高并发需求。
- `httpx`: 是一个全功能的HTTP客户端,支持HTTP/1.1和HTTP/2,并且同时支持同步和异步接口。

### 2. 优缺点及适用场景
## 2. 优缺点及适用场景

- `urllib`:
- **优点**: 标准库,不需要额外安装。
Expand All @@ -32,7 +32,7 @@
- **缺点**: 相对较新,社区支持和稳定性正在增强中。
- **适用场景**: 需要同时使用同步和异步请求,或需要HTTP/2支持的应用。

### 3. Requests和httpx的使用
## 3. Requests和httpx的使用
> headers、cookies、auth、proxy这几种是我们日常爬虫过程中,经常需要使用的,下面分别基于request和httpx来展示如何使用
- **Requests**:

Expand Down Expand Up @@ -86,7 +86,7 @@

httpx 的设计灵感来源于 requests,因此两者在用法上有很多相似之处。这是因为 httpx 的开发者希望提供一个类似于 requests 的简洁、易用的接口,同时又能够支持更多的功能和特性,比如对异步请求的支持以及对 HTTP/2 的原生支持。因此,如果您熟悉 requests 的用法,那么学习和使用 httpx 会变得非常容易和顺畅。

### 4. 入门示例
## 4. 入门示例

- **Requests示例**:

Expand All @@ -106,7 +106,7 @@ response = httpx.get('https://httpbin.org/get')
print(response.json())
```

### 5. 实际业务逻辑示例
## 5. 实际业务逻辑示例

假设我们需要实现一个功能:向`httpbin.org/post`发送POST请求,提交一些数据,并接收响应。

Expand Down Expand Up @@ -135,10 +135,10 @@ async def post_data():
asyncio.run(post_data())
```

### 6. 异步爬虫的趋势
## 6. 异步爬虫的趋势

Python3.7之后,随着`asyncio`库的成熟和普及,异步编程在Python中变得更加容易实现。异步爬虫可以同时发起和管理成百上千的网络请求,而不会阻塞主线程。这使得编写高性能的爬虫代码不再是难事,尤其是在数据采集、实时数据处理等领域,异步爬虫将会成为一种趋势。

### 7. 总结
## 7. 总结

在选择合适的网络请求库时,应考虑实际应用的需求:对于简单或不频繁的网络请求,可以选择`urllib``requests`;而在需要处理大量并发连接的场景下,则应考虑使用`aiohttp``httpx`。随着Python异步编程的发展,未来异步爬虫无疑会在性能和效率上带来更多优势。
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
## 爬虫静态网页数据提取
# 爬虫静态网页数据提取
> 为了照顾一些新入门的朋友,本篇的内容html内容解析会用两个库来完成,一个是`BeautifulSoup` 另一个是我比较喜欢用的`parsel`. 大多数新入门朋友可能学习爬虫的时候,都是从BeautifulSoup这个库开始的。
### 什么是静态网页
## 什么是静态网页
静态网页是指内容固定不变的网页,它的内容是直接写在 HTML 文件中的,不会因为用户的请求或者其他因素而改变。静态网页的内容通常由 HTML、CSS 和 JavaScript 组成,服务器只需要将这些文件发送给浏览器,浏览器就可以直接解析并显示网页内容。

### 静态网页工作原理
## 静态网页工作原理
>当用户在浏览器中输入一个静态网页的 URL 时,浏览器会向服务器发送一个 HTTP 请求,请求获取该 URL 对应的 HTML 文件。服务器接收到请求后,会在服务器上查找对应的 HTML 文件,并将其内容发送给浏览器。浏览器接收到 HTML 文件后,会解析其中的 HTML、CSS 和 JavaScript 代码,并根据这些代码渲染出网页内容。
![](../static/images/100000003.png)


### 爬取静态网页一般需要那些技术
## 爬取静态网页一般需要那些技术
- 会一点点前端的三件套(html、css、js)不会的朋友可以去菜鸟教程上面看一看,只需要简单的入门,知道html标签的一个结构,css选择器的简单用法,js的话暂时不太需要。
- 会使用网络请求库,比如requests、httpx等
- 会使用html解析库,比如BeautifulSoup、parsel等
Expand Down
Loading

0 comments on commit 6ef7a75

Please sign in to comment.