An open API service indexing awesome lists of open source software.

https://github.com/anycodes/developer-spider

阿里云开发者社区爬虫
https://github.com/anycodes/developer-spider

Last synced: about 1 year ago
JSON representation

阿里云开发者社区爬虫

Awesome Lists containing this project

README

          

# developer-spider 帮助文档











> ***阿里云开发者社区爬虫***

## 前期准备
使用该项目,推荐您拥有以下的产品权限 / 策略:

| 服务/业务 | 函数计算 |
| --- | --- |
| 权限/策略 | AliyunFCFullAccess |

## 部署 & 体验

- :fire: 通过 [Serverless 应用中心](https://fcnext.console.aliyun.com/applications/create?template=developer-spider) ,
[![Deploy with Severless Devs](https://img.alicdn.com/imgextra/i1/O1CN01w5RFbX1v45s8TIXPz_!!6000000006118-55-tps-95-28.svg)](https://fcnext.console.aliyun.com/applications/create?template=developer-spider) 该应用。

- 通过 [Serverless Devs Cli](https://www.serverless-devs.com/serverless-devs/install) 进行部署:
- [安装 Serverless Devs Cli 开发者工具](https://www.serverless-devs.com/serverless-devs/install) ,并进行[授权信息配置](https://www.serverless-devs.com/fc/config) ;
- 初始化项目:`s init developer-spider -d developer-spider`
- 进入项目,并进行项目部署:`cd developer-spider && s deploy -y`

# 应用详情

本应用是基于 Python 语言的爬虫案例,主要包括:
- 获取随机头
- 建立代理IP池
- 删除代理IP
- 获取代理IP

## 获取随机头

通常情况下,反爬虫系统会校验请求头信息,在请求头信息中最常校验的就是`User-Agent`,所以在本方法中,会随即返回一个`User-Agent`。如果在使用过程中,已经列举的`User-Agent`无法满足需求,可以额外添加。

> tips:`User-Agent`不仅仅单纯的应对反爬虫的时候会有用,往往也会降低我们的数据采集难度,例如有一些网站手机端`User-Agent`请求时所触发的反爬虫策略等级会远小于电脑版,所以`User-Agent`在一定程度上也可以用来切换客户端类型。

## 代理相关

由于代理IP在一定程度上是需要付费进行使用的,所以本案例所采用的代理IP部分仅供学习和参考。

本案例的代理IP服务商来自阿里云云市场:https://market.aliyun.com/products/57126001/cmapi00037885.html

开发者可以根据自己的需求对这一部分的代理IP获取方法进行完善。

> tips:本文所采用的代理IP使用策略是,当前IP失效后,清理掉失效IP,再更换代理IP,当然这个策略并不一定适合全部的数据采集情况,例如某些网站的反爬虫策略是IP限频,那么此时如果想要突破频率,可以采用的是每次更换代理IP,或同一链路请求完成更换代理IP,代理IP不清理并且循环利用;

## 主方法的注意事项

### 循环条件

循环条件,此处案例1到10,用来进行页码的循环,但是在实际爬虫过程中可能有其他的方法:

1. 根据返回的数据页面进行循环;
2. 根据返回的数据个数,决定是否要继续循环操作;
3. 更具已有的列表决定是否要循环

当然还有其他的很多循环条件,此处可以根据实际需要自行修改

### 切换IP的判断条件

在代码中虚拟了一个逻辑分支,用于为用户铺垫切换IP/切换UA/删除IP的条件:例如 response 出现了某个指定的字符串,需要对现有的IP进行删除,并切换IP和UA

```
if 'xxxxx' in response:
proxy = getProxy()
headers["User-Agent"] = getUserAgent()
response_status = False
# 触发重试逻辑,进行重试
continue
```

### 数据的下游处理

数据的下游处理方法在本文中并没有提及,通常情况下会将数据存放在MongoDB等数据库进行持久化,或将数据转到下游清洗逻辑进行数据清洗等相关的操作。

## 定时器与测试

当前案例采用的是定时任务,当然,在实际生产中可能出现触发式爬虫,例如像OSS写入数据进行数据采集,或者通过url进行数据采集。这一部分可以根据项目实际需求进行更改。

项目中定时任务配置:

```
triggers:
- name: timer
type: timer
config:
cronExpression: '@every 100m'
enable: true
```

部署完成后,可以点击函数:

![](http://image.editor.devsapp.cn/evBw7lh8ktv6xDBzSSzvjr1ykchAF9hG41gf1ek1sk8tr4355A/zraBABufG3ta2AGrzA82)

进入到函数查看页面,此时可以点击运行查看测试效果:

![](http://image.editor.devsapp.cn/evBw7lh8ktv6xDBzSSzvjr1ykchAF9hG41gf1ek1sk8tr4355A/ig4E84uS4twBEtuz6vkZ)

## 开发者社区

您如果有关于错误的反馈或者未来的期待,您可以在 [Serverless Devs repo Issues](https://github.com/serverless-devs/serverless-devs/issues) 中进行反馈和交流。如果您想要加入我们的讨论组或者了解 FC 组件的最新动态,您可以通过以下渠道进行:

| | | |
|--- | --- | --- |
|

微信公众号:`serverless` | 微信小助手:`xiaojiangwh` | 钉钉交流群:`33947367` |