命令行运行scrapy
from scrapy.cmdline import execute
execute(['scrapy','crawl','centoschina_cn'])
pipeline写入MySQL数据库
批量插入
在这里插入代码片
保存为CSV,xml,json文件
scrapy crawldouban -o douban.csv
scrapy crawldouban -o douban.xml
scrapy crawldouban -o douban.json
写入CSV
writerow : 写入一行。
writerows :写入多行。
writerow方法每次仅可以写入一行。
但写入的函数较多时,可以使用writerows()方法,该方法可以实现一次写入多行。
writerows()方法中的参数可以使用列表嵌套的方式。
# 导入模块
import csv
# 新建列表存储要写入的信息
list_1 = ['name','height']
list_2 = ['Mike','180']
list_3 = ['Bob','160']
list_4 = ['andy','170']
# 设置文件路径
file_path = '工作/学生体检表.csv'
# 以自动关闭文件的方式写入
with open(file_path, 'w', encoding='utf-8') as f:
# 调用模块的类:模块名.类名()
csv_writer = csv.writer(f)
# 调用类中的方法:对象.方法名()
csv_writer.writerow(list_1)
csv_writer.writerow(list_2)
csv_writer.writerows([list_3,list_4])
字典类型写入CSV
# 导入 csv 模块
import csv
# 新建两个字典
dict1 = {'name': '张三', 'height': '176'}
dict2 = {'name': '李四', 'height': '177'}
# 新建列表设置文件的表头
head = ['name', 'height']
# 设置文件路径
file_path = '工作/学生体检表.csv'
# 以自动关闭的方式写入文件
with open(file_path, 'w', encoding='utf-8') as f:
# 调用模块的类:模块名.类名()
# 参数 f 为 csv 文件的对象;
# 参数 fieldnames 的作用是定义文件的表头
dict_write = csv.DictWriter(f, fieldnames=head)
# 写入文件的表头
dict_write.writeheader()
# writerows一次性写入多行
dict_write.writerows([dict1,dict2])
def save_csv(self,area,data):
with open('{}.csv'.format(area), 'a+',encoding='gbk') as f:
csv_writer = csv.writer(f)
list1 = [str(data['project_id']),data['project_name']]
csv_writer.writerow(list1)
def get_info(self,area,every_page_url):
print(every_page_url)
result = requests.get(every_page_url).json()['data']['result']
if len(result)==0:
return
else:
for i in result:
self.save_file(area, {'project_name':i['project_name'],'project_id':i['project_id']})
self.save_csv(area, {'project_name': i['project_name'], 'project_id': i['project_id']})
return 1