|
|
## 评审目标
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 实现方案的正确性
|
|
|
2. 代码的坏味道
|
|
|
3. 规范性
|
|
|
```
|
|
|
|
|
|
### 评审日期
|
|
|
|
|
|
```
|
|
|
2021-12-02
|
|
|
```
|
|
|
|
|
|
### 评审人
|
|
|
|
|
|
```
|
|
|
李林坳,杨龙斌
|
|
|
```
|
|
|
|
|
|
### 被评审人
|
|
|
|
|
|
```
|
|
|
袁波
|
|
|
```
|
|
|
|
|
|
### 参考链接
|
|
|
|
|
|
- [代码入口](http://tech.pingansec.com/granite/project-gravel/-/tree/itjuzi_20211119/scrapy_spiders/gravel_spiders/spiders)
|
|
|
- [文档链接](http://tech.pingansec.com/granite/project-gravel/-/tree/itjuzi_20211119/app_itjuzi)
|
|
|
|
|
|
### 流程
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 被评审人需先整体描述需要解决的问题、解决流程 (被评审人讲解过程中,评审人可以记录问题,不要打断被评审者的思路)
|
|
|
2. 被评审人讲完,评审人和与会人员可以提问题
|
|
|
3. 评审人进行评审 (被评审者或者与会人员记录评审待改进的内容,有时并不是只针对被评审者,而是所有编码者)
|
|
|
4. 评审完成之后,落实待修改项,主要是缺陷和规范性
|
|
|
```
|
|
|
|
|
|
### 值得学习的地方
|
|
|
|
|
|
```buildoutcfg
|
|
|
1. 文档很全面,通过文档可以了解到review所需信息。
|
|
|
2. 将这个项目相关的items定义在单独的地方,结构上更加清晰,一些特有的工具类页同理
|
|
|
```
|
|
|
|
|
|
### 建议
|
|
|
|
|
|
- 流程可以合并,更易于部署管理
|
|
|
- 三个爬虫的代码结构很相似,如果不是业务上有拆分的需求是完全可以合并在一起的
|
|
|
|
|
|
- 不必要的请求头处理
|
|
|
- [Request.\_\_init__](http://tech.pingansec.com/granite/project-gravel/-/blob/itjuzi_20211119/scrapy_spiders/gravel_spiders/spiders/itjuzi_reqs/investevent/investevent_detaill.py#L17) 中`headers_raw_to_dict`方法可以生成一个类属性,避免每次请求都算一遍请求头
|
|
|
|
|
|
- 更易测试的解析
|
|
|
- 解析函数应只是从响应信息中取得所需信息,对解析后的信息可以进行再处理或者生成Item,解析代码应不涉及结果生成。
|
|
|
- 解析函数接收的参数是Response对象,应替换为字符串。[解析文件](http://tech.pingansec.com/granite/project-gravel/-/blob/itjuzi_20211119/scrapy_spiders/gravel_spiders/spiders/itjuzi_reqs/investevent/investevent_parse.py#L9)
|
|
|
|
|
|
|
|
|
- 代理中间件问题
|
|
|
- [添加代理的方式不对](http://tech.pingansec.com/granite/project-gravel/-/blob/itjuzi_20211119/scrapy_spiders/gravel_spiders/middlewares.py#L138)
|
|
|
```python
|
|
|
class ProxyMiddleware:
|
|
|
|
|
|
@classmethod
|
|
|
def from_crawler(cls, crawler):
|
|
|
settings = crawler.settings
|
|
|
return cls(settings.get('PROXY_WITH_CONNECT'))
|
|
|
|
|
|
def __init__(self, proxy):
|
|
|
self.proxy = proxy
|
|
|
|
|
|
def process_request(self, request, spider):
|
|
|
request.meta['proxy'] = self.proxy # 代理ip
|
|
|
spider.logger.debug('request meta: %s' % request.meta)
|
|
|
```
|
|
|
|
|
|
- 文件引入方式混用
|
|
|
- [建议统一使用项目绝对路径](http://tech.pingansec.com/granite/project-gravel/-/blob/itjuzi_20211119/scrapy_spiders/gravel_spiders/middlewares.py#L14)
|
|
|
|
|
|
- 测试方案优化
|
|
|
- 不用再修改`settings.py`或者`scrapy.cfg`文件,在`test.py`中用命令行启动的参数优先级是最高
|
|
|
```python
|
|
|
from scrapy import cmdline
|
|
|
|
|
|
name = "zongju_pc_spider"
|
|
|
cmd_settings = {
|
|
|
'LOG_LEVEL': 'DEBUG',
|
|
|
'REDIS_URL': 'redis://localhost:6379/0',
|
|
|
'PROXY_WITH_CONNECT': 'http://127.0.0.1:8888',
|
|
|
# 'CONCURRENT_REQUESTS': 1
|
|
|
}
|
|
|
|
|
|
cmd = 'scrapy crawl {0} {1}'.format(name, ' '.join(['-s %s=%s' % (k, v) for (k, v) in cmd_settings.items()]))
|
|
|
print(cmd)
|
|
|
cmdline.execute(cmd.split())
|
|
|
```
|
|
|
|
|
|
- 任务模块
|
|
|
- 重复代码。
|
|
|
- reader,writer的作用被替代。[文件地址](http://tech.pingansec.com/granite/project-gravel/-/blob/itjuzi_20211119/app_itjuzi/udms/itjuzi/itjuzi_tasks.py)
|
|
|
|
|
|
---
|
|
|
|
|
|
### 改进落实
|
|
|
|
|
|
```buildoutcfg
|
|
|
时间:
|
|
|
|
|
|
改进人:
|
|
|
|
|
|
监督人:
|
|
|
``` |
|
|
\ No newline at end of file |