logo

前言

记录开发爬虫系统的一些代码分析

管道处理

对于下载的txt

1
2
3
4
5
6
7
# 下载到本地
folder_path = "../txt/" + self.user_input
file_name = str(self.last_insert_id) + str(self.i_with_zeros) + ".txt"
os.makedirs(folder_path, exist_ok=True)
file_path = os.path.join(folder_path, file_name)
with open(file_path, 'w', encoding='gbk') as file:
file.write(content)

这个是ftp上传 修改的地方在执行一次的地方

1
2
3
4
5
6
7
8
# 上传到ftp
folder_path = "/txt/" + self.user_input
file_name = str(self.last_insert_id) + str(self.i_with_zeros) + ".txt"
self.ftp.mkd(folder_path)
self.ftp.cwd(folder_path)
content_gbk = content.encode('gbk')
file_obj = BytesIO(content_gbk)
self.ftp.storbinary(f'STOR {folder_path}/{file_name}', file_obj)

两种方法的代码端不一样 总之还是注意基础吧

content_gbk = content.encode('gbk')

这句话的意思是将字符串编码为gbk 因为前端写的时候是逻辑

file_obj = BytesIO(content_gbk)

这句话是将变成可读的os,不然会保存

开发注意的问题

1.self相当于java中的全局变量,如何需要传递一些数据就可以使用self

2.for循环里面的nwe item是一套,脱离for循环会发送对象不统一的情况,导致数据乱序

3.因为爬虫请求是多线处理,而响应的时候不一定是按照顺序响应,所以需要对数据进行for前面的索引来排序

4.def start_requests(self, result=result): 使用=传参 其余几个爬虫也得使用=号 不然会显示签名有问题

新建一个爬虫,不同的网站对应不同的规则

scrapy genspider ibiqiuge_spider www.ibiqiuge.com