Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
K
kb
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 2
    • Issues 2
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • Operations
    • Operations
    • Incidents
  • Analytics
    • Analytics
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar
  • granite
  • kb
  • Wiki
    • Code review
  • it桔子

it桔子 · Changes

Page history
add code_review authored Dec 02, 2021 by 杨龙斌's avatar 杨龙斌
Show whitespace changes
Inline Side-by-side
Showing with 115 additions and 0 deletions
+115 -0
  • code-review/it桔子.md code-review/it桔子.md +115 -0
  • No files found.
code-review/it桔子.md 0 → 100644
View page @ 050e4289
## 评审目标
```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
Clone repository
  • README
  • basic_guidelines
  • basic_guidelines
    • basic_guidelines
    • dev_guide
    • project_build
    • 开发流程
  • best_practice
  • best_practice
    • AlterTable
    • RDS
    • azkaban
    • create_table
    • design
    • elasticsearch
    • elasticsearch
      • ES运维
    • logstash
View All Pages